{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 自适应检索增强型RAG系统\n",
    "自适应检索(Adaptive Retrieval)系统可根据查询类型动态选择最优检索策略，该方法显著提升RAG系统在多样化问题场景下的响应准确性与相关性。\n",
    "\n",
    "-----\n",
    "不同查询类型需匹配差异化检索策略，本系统实现四阶优化流程：\n",
    "1. 查询类型分类（事实性/分析性/意见性/上下文型）\n",
    "2. 自适应选择检索策略\n",
    "3. 执行专门的检索技术\n",
    "4. 生成定制化响应\n",
    "\n",
    "-----\n",
    "实现步骤：\n",
    "- 处理文档以提取文本，将其分块，并创建嵌入向量\n",
    "- 对查询进行分类以确定其类型：查询分为事实性（Factual）、分析性（Analytical）、意见性（Opinion）或上下文相关性（Contextual）。\n",
    "- 根据查询类型使用自适应检索策略检索文档\n",
    "- 根据查询、检索到的文档和查询类型生成回答"
   ],
   "id": "dcd17f94f38538d0"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:39.695244Z",
     "start_time": "2025-04-25T09:49:37.028786Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import fitz\n",
    "import os\n",
    "import re\n",
    "import json\n",
    "import numpy as np\n",
    "from tqdm import tqdm\n",
    "from openai import OpenAI\n",
    "from dotenv import load_dotenv\n",
    "from datetime import datetime\n",
    "\n",
    "load_dotenv()"
   ],
   "id": "3e508790b2d80965",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:42.236332Z",
     "start_time": "2025-04-25T09:49:41.900173Z"
    }
   },
   "cell_type": "code",
   "source": [
    "client = OpenAI(\n",
    "    base_url=os.getenv(\"LLM_BASE_URL\"),\n",
    "    api_key=os.getenv(\"LLM_API_KEY\")\n",
    ")\n",
    "llm_model = os.getenv(\"LLM_MODEL_ID\")\n",
    "embedding_model = os.getenv(\"EMBEDDING_MODEL_ID\")\n",
    "\n",
    "pdf_path = \"../../data/AI_Information.en.zh-CN.pdf\""
   ],
   "id": "e1e4f95b9a818896",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:44.183102Z",
     "start_time": "2025-04-25T09:49:44.179723Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def extract_text_from_pdf(pdf_path):\n",
    "    \"\"\"\n",
    "    从 PDF 文件中提取文本，并打印前 `num_chars` 个字符。\n",
    "\n",
    "    Args:\n",
    "    pdf_path (str): Path to the PDF file.\n",
    "\n",
    "    Returns:\n",
    "    str: Extracted text from the PDF.\n",
    "    \"\"\"\n",
    "    # 打开 PDF 文件\n",
    "    mypdf = fitz.open(pdf_path)\n",
    "    all_text = \"\"  # 初始化一个空字符串以存储提取的文本\n",
    "\n",
    "    # Iterate through each page in the PDF\n",
    "    for page_num in range(mypdf.page_count):\n",
    "        page = mypdf[page_num]\n",
    "        text = page.get_text(\"text\")  # 从页面中提取文本\n",
    "        all_text += text  # 将提取的文本追加到 all_text 字符串中\n",
    "\n",
    "    return all_text  # 返回提取的文本"
   ],
   "id": "1a76760501cab53e",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:45.273549Z",
     "start_time": "2025-04-25T09:49:45.269877Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def chunk_text(text, n, overlap):\n",
    "    \"\"\"\n",
    "    将文本分割为重叠的块\n",
    "\n",
    "    Args:\n",
    "    text (str): 要分割的文本\n",
    "    n (int): 每个块的字符数\n",
    "    overlap (int): 块之间的重叠字符数\n",
    "\n",
    "    Returns:\n",
    "    List[str]: 文本块列表\n",
    "    \"\"\"\n",
    "    chunks = []  #\n",
    "    for i in range(0, len(text), n - overlap):\n",
    "        # 添加从当前索引到索引 + 块大小的文本块\n",
    "        chunk = text[i:i + n]\n",
    "        if chunk:\n",
    "            chunks.append(chunk)\n",
    "\n",
    "    return chunks  # Return the list of text chunks"
   ],
   "id": "f55caed860818344",
   "outputs": [],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:46.391436Z",
     "start_time": "2025-04-25T09:49:46.386114Z"
    }
   },
   "cell_type": "code",
   "source": [
    "class SimpleVectorStore:\n",
    "    \"\"\"\n",
    "    使用NumPy实现的简单向量存储。\n",
    "    \"\"\"\n",
    "    def __init__(self):\n",
    "        \"\"\"\n",
    "        初始化向量存储。\n",
    "        \"\"\"\n",
    "        self.vectors = []  # 用于存储嵌入向量的列表\n",
    "        self.texts = []  # 用于存储原始文本的列表\n",
    "        self.metadata = []  # 用于存储每个文本元数据的列表\n",
    "\n",
    "    def add_item(self, text, embedding, metadata=None):\n",
    "        \"\"\"\n",
    "        向向量存储中添加一个项目。\n",
    "\n",
    "        Args:\n",
    "        text (str): 原始文本。\n",
    "        embedding (List[float]): 嵌入向量。\n",
    "        metadata (dict, 可选): 额外的元数据。\n",
    "        \"\"\"\n",
    "        self.vectors.append(np.array(embedding))  # 将嵌入转换为numpy数组并添加到向量列表中\n",
    "        self.texts.append(text)  # 将原始文本添加到文本列表中\n",
    "        self.metadata.append(metadata or {})  # 添加元数据到元数据列表中，如果没有提供则使用空字典\n",
    "\n",
    "    def similarity_search(self, query_embedding, k=5):\n",
    "        \"\"\"\n",
    "        查找与查询嵌入最相似的项目。\n",
    "\n",
    "        Args:\n",
    "        query_embedding (List[float]): 查询嵌入向量。\n",
    "        k (int): 返回的结果数量。\n",
    "\n",
    "        Returns:\n",
    "        List[Dict]: 包含文本和元数据的前k个最相似项。\n",
    "        \"\"\"\n",
    "        if not self.vectors:\n",
    "            return []  # 如果没有存储向量，则返回空列表\n",
    "\n",
    "        # 将查询嵌入转换为numpy数组\n",
    "        query_vector = np.array(query_embedding)\n",
    "\n",
    "        # 使用余弦相似度计算相似度\n",
    "        similarities = []\n",
    "        for i, vector in enumerate(self.vectors):\n",
    "            # 计算查询向量与存储向量之间的余弦相似度\n",
    "            similarity = np.dot(query_vector, vector) / (np.linalg.norm(query_vector) * np.linalg.norm(vector))\n",
    "            similarities.append((i, similarity))  # 添加索引和相似度分数\n",
    "\n",
    "        # 按相似度排序（降序）\n",
    "        similarities.sort(key=lambda x: x[1], reverse=True)\n",
    "\n",
    "        # 返回前k个结果\n",
    "        results = []\n",
    "        for i in range(min(k, len(similarities))):\n",
    "            idx, score = similarities[i]\n",
    "            results.append({\n",
    "                \"text\": self.texts[idx],  # 添加对应的文本\n",
    "                \"metadata\": self.metadata[idx],  # 添加对应的元数据\n",
    "                \"similarity\": score  # 添加相似度分数\n",
    "            })\n",
    "\n",
    "        return results  # 返回前k个最相似项的列表\n"
   ],
   "id": "c187adecb24c6d3",
   "outputs": [],
   "execution_count": 5
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:48.143127Z",
     "start_time": "2025-04-25T09:49:48.140100Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def create_embeddings(text):\n",
    "    \"\"\"\n",
    "    使用Embedding模型为给定文本创建嵌入向量。\n",
    "\n",
    "    Args:\n",
    "    text (str): 要创建嵌入向量的输入文本。\n",
    "\n",
    "    Returns:\n",
    "    List[float]: 嵌入向量。\n",
    "    \"\"\"\n",
    "    # 通过将字符串输入转换为列表来处理字符串和列表输入\n",
    "    input_text = text if isinstance(text, list) else [text]\n",
    "\n",
    "    # 使用指定的模型为输入文本创建嵌入向量\n",
    "    response = client.embeddings.create(\n",
    "        model=embedding_model,\n",
    "        input=input_text\n",
    "    )\n",
    "\n",
    "    # 如果输入是字符串，仅返回第一个嵌入向量\n",
    "    if isinstance(text, str):\n",
    "        return response.data[0].embedding\n",
    "\n",
    "    # 否则，将所有嵌入向量作为向量列表返回\n",
    "    return [item.embedding for item in response.data]"
   ],
   "id": "650fa6f3579b5f33",
   "outputs": [],
   "execution_count": 6
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:49.090899Z",
     "start_time": "2025-04-25T09:49:49.086063Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def process_document(pdf_path, chunk_size=1000, chunk_overlap=200):\n",
    "    \"\"\"\n",
    "    为RAG处理文档。\n",
    "\n",
    "    Args:\n",
    "    pdf_path (str): PDF文件的路径。\n",
    "    chunk_size (int): 每个文本块的大小（以字符为单位）。\n",
    "    chunk_overlap (int): 文本块之间的重叠大小（以字符为单位）。\n",
    "\n",
    "    Returns:\n",
    "    Tuple[List[str], SimpleVectorStore]: 包含文档文本块及其嵌入向量的向量存储。\n",
    "    \"\"\"\n",
    "    print(\"从PDF中提取文本...\")\n",
    "    extracted_text = extract_text_from_pdf(pdf_path)  # 调用函数提取PDF中的文本\n",
    "\n",
    "    print(\"分割文本...\")\n",
    "    chunks = chunk_text(extracted_text, chunk_size, chunk_overlap)  # 将提取的文本分割为多个块\n",
    "    print(f\"创建了 {len(chunks)} 个文本块\")\n",
    "\n",
    "    print(\"为文本块创建嵌入向量...\")\n",
    "    # 为了提高效率，一次性为所有文本块创建嵌入向量\n",
    "    chunk_embeddings = create_embeddings(chunks)\n",
    "\n",
    "    # 创建向量存储\n",
    "    store = SimpleVectorStore()\n",
    "\n",
    "    # 将文本块添加到向量存储中\n",
    "    for i, (chunk, embedding) in enumerate(zip(chunks, chunk_embeddings)):\n",
    "        store.add_item(\n",
    "            text=chunk,  # 文本内容\n",
    "            embedding=embedding,  # 嵌入向量\n",
    "            metadata={\"index\": i, \"source\": pdf_path}  # 元数据，包括索引和源文件路径\n",
    "        )\n",
    "\n",
    "    print(f\"向向量存储中添加了 {len(chunks)} 个文本块\")\n",
    "    return chunks, store"
   ],
   "id": "c6a515b529e1f2a2",
   "outputs": [],
   "execution_count": 7
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 查询分类",
   "id": "c65ccc96dbddee3"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:52.070253Z",
     "start_time": "2025-04-25T09:49:52.064991Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def classify_query(query):\n",
    "    \"\"\"\n",
    "    将查询分类为四个类别之一：事实性（Factual）、分析性（Analytical）、意见性（Opinion）或上下文相关性（Contextual）。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "\n",
    "    Returns:\n",
    "        str: 查询类别\n",
    "    \"\"\"\n",
    "    # 定义系统提示以指导AI进行分类\n",
    "    system_prompt = \"\"\"您是专业的查询分类专家。\n",
    "        请将给定查询严格分类至以下四类中的唯一一项：\n",
    "        - Factual：需要具体、可验证信息的查询\n",
    "        - Analytical：需要综合分析或深入解释的查询\n",
    "        - Opinion：涉及主观问题或寻求多元观点的查询\n",
    "        - Contextual：依赖用户具体情境的查询\n",
    "\n",
    "        请仅返回分类名称，不要添加任何解释或额外文本。\n",
    "    \"\"\"\n",
    "\n",
    "    # 创建包含要分类查询的用户提示\n",
    "    user_prompt = f\"对以下查询进行分类: {query}\"\n",
    "\n",
    "    # 从AI模型生成分类响应\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0\n",
    "    )\n",
    "\n",
    "    # 从响应中提取并去除多余的空白字符以获取类别\n",
    "    category = response.choices[0].message.content.strip()\n",
    "\n",
    "    # 定义有效的类别列表\n",
    "    valid_categories = [\"Factual\", \"Analytical\", \"Opinion\", \"Contextual\"]\n",
    "\n",
    "    # 确保返回的类别是有效的\n",
    "    for valid in valid_categories:\n",
    "        if valid in category:\n",
    "            return valid\n",
    "\n",
    "    # 如果分类失败，默认返回“Factual”（事实性）\n",
    "    return \"Factual\"\n"
   ],
   "id": "916d5f55c6c417c1",
   "outputs": [],
   "execution_count": 8
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "## 专项检索策略实现方案\n",
    "### 1. 事实性策略 - 精准导向"
   ],
   "id": "63977ba96060f7c9"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:56.588022Z",
     "start_time": "2025-04-25T09:49:56.581796Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def factual_retrieval_strategy(query, vector_store, k=4):\n",
    "    \"\"\"\n",
    "    针对事实性查询的检索策略，专注于精确度。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        vector_store (SimpleVectorStore): 向量存储库\n",
    "        k (int): 返回的文档数量\n",
    "\n",
    "    Returns:\n",
    "        List[Dict]: 检索到的文档列表\n",
    "    \"\"\"\n",
    "    print(f\"执行事实性检索策略: '{query}'\")\n",
    "\n",
    "    # 使用LLM增强查询以提高精确度\n",
    "    system_prompt = \"\"\"您是搜索查询优化专家。\n",
    "        您的任务是重构给定的事实性查询，使其更精确具体以提升信息检索效果。\n",
    "        重点关注关键实体及其关联关系。\n",
    "\n",
    "        请仅提供优化后的查询，不要包含任何解释。\n",
    "    \"\"\"\n",
    "\n",
    "    user_prompt = f\"请优化此事实性查询: {query}\"\n",
    "\n",
    "    # 使用LLM生成增强后的查询\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0\n",
    "    )\n",
    "\n",
    "    # 提取并打印增强后的查询\n",
    "    enhanced_query = response.choices[0].message.content.strip()\n",
    "    print(f\"优化后的查询: {enhanced_query}\")\n",
    "\n",
    "    # 为增强后的查询创建嵌入向量\n",
    "    query_embedding = create_embeddings(enhanced_query)\n",
    "\n",
    "    # 执行初始相似性搜索以检索文档\n",
    "    initial_results = vector_store.similarity_search(query_embedding, k=k*2)\n",
    "\n",
    "    # 初始化一个列表来存储排序后的结果\n",
    "    ranked_results = []\n",
    "\n",
    "    # 使用LLM对文档进行评分和排序\n",
    "    for doc in initial_results:\n",
    "        relevance_score = score_document_relevance(enhanced_query, doc[\"text\"])\n",
    "        ranked_results.append({\n",
    "            \"text\": doc[\"text\"],\n",
    "            \"metadata\": doc[\"metadata\"],\n",
    "            \"similarity\": doc[\"similarity\"],\n",
    "            \"relevance_score\": relevance_score\n",
    "        })\n",
    "\n",
    "    # 按相关性得分降序排列结果\n",
    "    ranked_results.sort(key=lambda x: x[\"relevance_score\"], reverse=True)\n",
    "\n",
    "    # 返回前k个结果\n",
    "    return ranked_results[:k]\n"
   ],
   "id": "d614a5e3140cf68d",
   "outputs": [],
   "execution_count": 9
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 2. 分析性策略 - 全面覆盖\n",
   "id": "4855960972e22f7b"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:49:58.810288Z",
     "start_time": "2025-04-25T09:49:58.803454Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def analytical_retrieval_strategy(query, vector_store, k=4):\n",
    "    \"\"\"\n",
    "    针对分析性查询的检索策略，专注于全面覆盖。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        vector_store (SimpleVectorStore): 向量存储库\n",
    "        k (int): 返回的文档数量\n",
    "\n",
    "    Returns:\n",
    "        List[Dict]: 检索到的文档列表\n",
    "    \"\"\"\n",
    "    print(f\"执行分析性检索策略: '{query}'\")\n",
    "\n",
    "    # 定义系统提示以指导AI生成子问题\n",
    "    system_prompt = \"\"\"您是复杂问题拆解专家。\n",
    "    请针对给定的分析性查询生成探索不同维度的子问题。\n",
    "    这些子问题应覆盖主题的广度并帮助获取全面信息。\n",
    "\n",
    "    请严格生成恰好3个子问题，每个问题单独一行。\n",
    "    \"\"\"\n",
    "\n",
    "    # 创建包含主查询的用户提示\n",
    "    user_prompt = f\"请为此分析性查询生成子问题：{query}\"\n",
    "\n",
    "    # 使用LLM生成子问题\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0.3\n",
    "    )\n",
    "\n",
    "    # 提取并清理子问题\n",
    "    sub_queries = response.choices[0].message.content.strip().split('\\n')\n",
    "    sub_queries = [q.strip() for q in sub_queries if q.strip()]\n",
    "    print(f\"生成的子问题: {sub_queries}\")\n",
    "\n",
    "    # 为每个子问题检索文档\n",
    "    all_results = []\n",
    "    for sub_query in sub_queries:\n",
    "        # 为子问题创建嵌入向量\n",
    "        sub_query_embedding = create_embeddings(sub_query)\n",
    "        # 执行相似性搜索以获取子问题的结果\n",
    "        results = vector_store.similarity_search(sub_query_embedding, k=2)\n",
    "        all_results.extend(results)\n",
    "\n",
    "    # 确保多样性，从不同的子问题结果中选择\n",
    "    # 移除重复项（相同的文本内容）\n",
    "    unique_texts = set()\n",
    "    diverse_results = []\n",
    "\n",
    "    for result in all_results:\n",
    "        if result[\"text\"] not in unique_texts:\n",
    "            unique_texts.add(result[\"text\"])\n",
    "            diverse_results.append(result)\n",
    "\n",
    "    # 如果需要更多结果以达到k，则从初始结果中添加更多\n",
    "    if len(diverse_results) < k:\n",
    "        # 对主查询直接检索\n",
    "        main_query_embedding = create_embeddings(query)\n",
    "        main_results = vector_store.similarity_search(main_query_embedding, k=k)\n",
    "\n",
    "        for result in main_results:\n",
    "            if result[\"text\"] not in unique_texts and len(diverse_results) < k:\n",
    "                unique_texts.add(result[\"text\"])\n",
    "                diverse_results.append(result)\n",
    "\n",
    "    # 返回前k个多样化的结果\n",
    "    return diverse_results[:k]\n"
   ],
   "id": "1e996f82c87ab8b7",
   "outputs": [],
   "execution_count": 10
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 3. 观点性策略 - 多元视角\n",
   "id": "8487b9aea259de0f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:08.796052Z",
     "start_time": "2025-04-25T09:50:08.790356Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def opinion_retrieval_strategy(query, vector_store, k=4):\n",
    "    \"\"\"\n",
    "    针对观点查询的检索策略，专注于多样化的观点。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        vector_store (SimpleVectorStore): 向量存储库\n",
    "        k (int): 返回的文档数量\n",
    "\n",
    "    Returns:\n",
    "        List[Dict]: 检索到的文档列表\n",
    "    \"\"\"\n",
    "    print(f\"执行观点检索策略: '{query}'\")\n",
    "\n",
    "    # 定义系统提示以指导AI识别不同观点\n",
    "    system_prompt = \"\"\"您是主题多视角分析专家。\n",
    "        针对给定的观点类或意见类查询，请识别人们可能持有的不同立场或观点。\n",
    "\n",
    "        请严格返回恰好3个不同观点角度，每个角度单独一行。\n",
    "    \"\"\"\n",
    "\n",
    "    # 创建包含主查询的用户提示\n",
    "    user_prompt = f\"请识别以下主题的不同观点：{query}\"\n",
    "\n",
    "    # 使用LLM生成不同的观点\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0.3\n",
    "    )\n",
    "\n",
    "    # 提取并清理观点\n",
    "    viewpoints = response.choices[0].message.content.strip().split('\\n')\n",
    "    viewpoints = [v.strip() for v in viewpoints if v.strip()]\n",
    "    print(f\"已识别的观点: {viewpoints}\")\n",
    "\n",
    "    # 检索代表每个观点的文档\n",
    "    all_results = []\n",
    "    for viewpoint in viewpoints:\n",
    "        # 将主查询与观点结合\n",
    "        combined_query = f\"{query} {viewpoint}\"\n",
    "        # 为组合查询创建嵌入向量\n",
    "        viewpoint_embedding = create_embeddings(combined_query)\n",
    "        # 执行相似性搜索以获取组合查询的结果\n",
    "        results = vector_store.similarity_search(viewpoint_embedding, k=2)\n",
    "\n",
    "        # 标记结果所代表的观点\n",
    "        for result in results:\n",
    "            result[\"viewpoint\"] = viewpoint\n",
    "\n",
    "        # 将结果添加到所有结果列表中\n",
    "        all_results.extend(results)\n",
    "\n",
    "    # 选择多样化的意见范围\n",
    "    # 尽量确保从每个观点中至少获得一个文档\n",
    "    selected_results = []\n",
    "    for viewpoint in viewpoints:\n",
    "        # 按观点过滤文档\n",
    "        viewpoint_docs = [r for r in all_results if r.get(\"viewpoint\") == viewpoint]\n",
    "        if viewpoint_docs:\n",
    "            selected_results.append(viewpoint_docs[0])\n",
    "\n",
    "    # 用最高相似度的文档填充剩余的槽位\n",
    "    remaining_slots = k - len(selected_results)\n",
    "    if remaining_slots > 0:\n",
    "        # 按相似度排序剩余文档\n",
    "        remaining_docs = [r for r in all_results if r not in selected_results]\n",
    "        remaining_docs.sort(key=lambda x: x[\"similarity\"], reverse=True)\n",
    "        selected_results.extend(remaining_docs[:remaining_slots])\n",
    "\n",
    "    # 返回前k个结果\n",
    "    return selected_results[:k]\n"
   ],
   "id": "e43003b7e89dd760",
   "outputs": [],
   "execution_count": 11
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 4. 上下文型策略 - 情境整合\n",
   "id": "857aed2c9efd3578"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:10.725695Z",
     "start_time": "2025-04-25T09:50:10.719734Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def contextual_retrieval_strategy(query, vector_store, k=4, user_context=None):\n",
    "    \"\"\"\n",
    "    针对上下文查询的检索策略，结合用户提供的上下文信息。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        vector_store (SimpleVectorStore): 向量存储库\n",
    "        k (int): 返回的文档数量\n",
    "        user_context (str): 额外的用户上下文信息\n",
    "\n",
    "    Returns:\n",
    "        List[Dict]: 检索到的文档列表\n",
    "    \"\"\"\n",
    "    print(f\"执行上下文检索策略: '{query}'\")\n",
    "\n",
    "    # 如果未提供用户上下文，则尝试从查询中推断上下文\n",
    "    if not user_context:\n",
    "        system_prompt = \"\"\"您是理解查询隐含上下文的专家。\n",
    "        对于给定的查询，请推断可能相关或隐含但未明确说明的上下文信息。\n",
    "        重点关注有助于回答该查询的背景信息。\n",
    "\n",
    "        请简要描述推断的隐含上下文。\n",
    "        \"\"\"\n",
    "\n",
    "        user_prompt = f\"推断此查询中的隐含背景(上下文)：{query}\"\n",
    "\n",
    "        # 使用LLM生成推断出的上下文\n",
    "        response = client.chat.completions.create(\n",
    "            model=llm_model,\n",
    "            messages=[\n",
    "                {\"role\": \"system\", \"content\": system_prompt},\n",
    "                {\"role\": \"user\", \"content\": user_prompt}\n",
    "            ],\n",
    "            temperature=0.1\n",
    "        )\n",
    "\n",
    "        # 提取并打印推断出的上下文\n",
    "        user_context = response.choices[0].message.content.strip()\n",
    "        print(f\"推断出的上下文: {user_context}\")\n",
    "\n",
    "    # 重新表述查询以结合上下文\n",
    "    system_prompt = \"\"\"您是上下文整合式查询重构专家。\n",
    "    根据提供的查询和上下文信息，请重新构建更具体的查询以整合上下文，从而获取更相关的信息。\n",
    "\n",
    "    请仅返回重新构建的查询，不要包含任何解释。\n",
    "    \"\"\"\n",
    "\n",
    "    user_prompt = f\"\"\"\n",
    "    原始查询：{query}\n",
    "    关联上下文：{user_context}\n",
    "\n",
    "    请结合此上下文重新构建查询：\n",
    "    \"\"\"\n",
    "\n",
    "    # 使用LLM生成结合上下文的查询\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0\n",
    "    )\n",
    "\n",
    "    # 提取并打印结合上下文的查询\n",
    "    contextualized_query = response.choices[0].message.content.strip()\n",
    "    print(f\"结合上下文的查询: {contextualized_query}\")\n",
    "\n",
    "    # 基于结合上下文的查询检索文档\n",
    "    query_embedding = create_embeddings(contextualized_query)\n",
    "    initial_results = vector_store.similarity_search(query_embedding, k=k*2)\n",
    "\n",
    "    # 根据相关性和用户上下文对文档进行排序\n",
    "    ranked_results = []\n",
    "\n",
    "    for doc in initial_results:\n",
    "        # 计算文档在考虑上下文情况下的相关性得分\n",
    "        context_relevance = score_document_context_relevance(query, user_context, doc[\"text\"])\n",
    "        ranked_results.append({\n",
    "            \"text\": doc[\"text\"],\n",
    "            \"metadata\": doc[\"metadata\"],\n",
    "            \"similarity\": doc[\"similarity\"],\n",
    "            \"context_relevance\": context_relevance\n",
    "        })\n",
    "\n",
    "    # 按上下文相关性排序，并返回前k个结果\n",
    "    ranked_results.sort(key=lambda x: x[\"context_relevance\"], reverse=True)\n",
    "    return ranked_results[:k]\n"
   ],
   "id": "7b47ee1d82fd963a",
   "outputs": [],
   "execution_count": 12
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 文档评分辅助函数",
   "id": "d81f8965d4548cc7"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:13.324704Z",
     "start_time": "2025-04-25T09:50:13.320086Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def score_document_relevance(query, document):\n",
    "    \"\"\"\n",
    "    使用LLM对文档与查询的相关性进行评分。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        document (str): 文档文本\n",
    "\n",
    "    Returns:\n",
    "        float: 相关性评分，范围为0-10\n",
    "    \"\"\"\n",
    "    # 系统提示，指导模型如何评估相关性\n",
    "    system_prompt = \"\"\"您是文档相关性评估专家。\n",
    "        请根据文档与查询的匹配程度给出0到10分的评分：\n",
    "        0 = 完全无关\n",
    "        10 = 完美契合查询\n",
    "\n",
    "        请仅返回一个0到10之间的数字评分，不要包含任何其他内容。\n",
    "    \"\"\"\n",
    "\n",
    "    # 如果文档过长，则截断文档\n",
    "    doc_preview = document[:1500] + \"...\" if len(document) > 1500 else document\n",
    "\n",
    "    # 包含查询和文档预览的用户提示\n",
    "    user_prompt = f\"\"\"\n",
    "        查询: {query}\n",
    "\n",
    "        文档: {doc_preview}\n",
    "\n",
    "        相关性评分（0-10）：\n",
    "    \"\"\"\n",
    "\n",
    "    # 使用模型生成响应\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0\n",
    "    )\n",
    "\n",
    "    # 从模型的响应中提取评分\n",
    "    score_text = response.choices[0].message.content.strip()\n",
    "\n",
    "    # 使用正则表达式提取数值评分\n",
    "    match = re.search(r'(\\d+(\\.\\d+)?)', score_text)\n",
    "    if match:\n",
    "        score = float(match.group(1))\n",
    "        return min(10, max(0, score))  # 确保评分在0-10范围内\n",
    "    else:\n",
    "        # 如果提取失败，则返回默认评分\n",
    "        return 5.0\n"
   ],
   "id": "137a2f14a4fb031",
   "outputs": [],
   "execution_count": 13
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:14.763825Z",
     "start_time": "2025-04-25T09:50:14.757597Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def score_document_context_relevance(query, context, document):\n",
    "    \"\"\"\n",
    "    根据查询和上下文评估文档的相关性。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        context (str): 用户上下文\n",
    "        document (str): 文档文本\n",
    "\n",
    "    Returns:\n",
    "        float: 相关性评分，范围为0-10\n",
    "    \"\"\"\n",
    "    # 系统提示，指导模型如何根据上下文评估相关性\n",
    "    system_prompt = \"\"\"您是结合上下文评估文档相关性的专家。\n",
    "        请根据文档在给定上下文中对查询的响应质量，给出0到10分的评分：\n",
    "        0 = 完全无关\n",
    "        10 = 在给定上下文中完美契合查询\n",
    "\n",
    "        请严格仅返回一个0到10之间的数字评分，不要包含任何其他内容。\n",
    "    \"\"\"\n",
    "\n",
    "    # 如果文档过长，则截断文档\n",
    "    doc_preview = document[:1500] + \"...\" if len(document) > 1500 else document\n",
    "\n",
    "    # 包含查询、上下文和文档预览的用户提示\n",
    "    user_prompt = f\"\"\"\n",
    "    待评估查询：{query}\n",
    "    关联上下文：{context}\n",
    "\n",
    "    文档内容预览：\n",
    "    {doc_preview}\n",
    "\n",
    "    结合上下文的相关性评分（0-10）：\n",
    "    \"\"\"\n",
    "\n",
    "    # 使用模型生成响应\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0\n",
    "    )\n",
    "\n",
    "    # 从模型的响应中提取评分\n",
    "    score_text = response.choices[0].message.content.strip()\n",
    "\n",
    "    # 使用正则表达式提取数值评分\n",
    "    match = re.search(r'(\\d+(\\.\\d+)?)', score_text)\n",
    "    if match:\n",
    "        score = float(match.group(1))\n",
    "        return min(10, max(0, score))  # 确保评分在0-10范围内\n",
    "    else:\n",
    "        # 如果提取失败，则返回默认评分\n",
    "        return 5.0\n"
   ],
   "id": "bfa89ea1692150eb",
   "outputs": [],
   "execution_count": 14
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 自适应检索的核心函数",
   "id": "6c5606dd2544f243"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:17.054768Z",
     "start_time": "2025-04-25T09:50:17.051217Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def adaptive_retrieval(query, vector_store, k=4, user_context=None):\n",
    "    \"\"\"\n",
    "    执行自适应检索，通过选择并执行适当的检索策略。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        vector_store (SimpleVectorStore): 向量存储\n",
    "        k (int): 要检索的文档数量\n",
    "        user_context (str): 可选的用户上下文，用于上下文相关的查询\n",
    "\n",
    "    Returns:\n",
    "        List[Dict]: 检索到的文档列表\n",
    "    \"\"\"\n",
    "    # 对查询进行分类以确定其类型\n",
    "    query_type = classify_query(query)\n",
    "    print(f\"查询被分类为: {query_type}\")\n",
    "\n",
    "    # 根据查询类型选择并执行适当的检索策略\n",
    "    if query_type == \"Factual\":\n",
    "        # 使用事实检索策略获取精确信息\n",
    "        results = factual_retrieval_strategy(query, vector_store, k)\n",
    "    elif query_type == \"Analytical\":\n",
    "        # 使用分析检索策略实现全面覆盖\n",
    "        results = analytical_retrieval_strategy(query, vector_store, k)\n",
    "    elif query_type == \"Opinion\":\n",
    "        # 使用观点检索策略获取多样化的观点\n",
    "        results = opinion_retrieval_strategy(query, vector_store, k)\n",
    "    elif query_type == \"Contextual\":\n",
    "        # 使用上下文检索策略，并结合用户上下文\n",
    "        results = contextual_retrieval_strategy(query, vector_store, k, user_context)\n",
    "    else:\n",
    "        # 如果分类失败，默认使用事实检索策略\n",
    "        results = factual_retrieval_strategy(query, vector_store, k)\n",
    "\n",
    "    return results  # 返回检索到的文档\n"
   ],
   "id": "769a2ff3bf598413",
   "outputs": [],
   "execution_count": 15
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 回答生成",
   "id": "694ed8e83c811bdd"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:18.602466Z",
     "start_time": "2025-04-25T09:50:18.597593Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def generate_response(query, results, query_type):\n",
    "    \"\"\"\n",
    "    根据查询、检索到的文档和查询类型生成响应。\n",
    "\n",
    "    Args:\n",
    "        query (str): 用户查询\n",
    "        results (List[Dict]): 检索到的文档列表\n",
    "        query_type (str): 查询类型\n",
    "\n",
    "    Returns:\n",
    "        str: 生成的响应\n",
    "    \"\"\"\n",
    "    # 从检索到的文档中准备上下文，通过连接它们的文本并使用分隔符\n",
    "    context = \"\\n\\n---\\n\\n\".join([r[\"text\"] for r in results])\n",
    "\n",
    "    # 根据查询类型创建自定义系统提示\n",
    "    if query_type == \"Factual\":\n",
    "        system_prompt = \"\"\"您是基于事实信息应答的AI助手。\n",
    "    请严格根据提供的上下文回答问题，确保信息准确无误。\n",
    "    若上下文缺乏必要信息，请明确指出信息局限。\"\"\"\n",
    "\n",
    "    elif query_type == \"Analytical\":\n",
    "        system_prompt = \"\"\"您是专业分析型AI助手。\n",
    "    请基于提供的上下文，对主题进行多维度深度解析：\n",
    "    - 涵盖不同层面的关键要素（不同方面和视角）\n",
    "    - 整合多方观点形成系统分析\n",
    "    若上下文存在信息缺口或空白，请在分析时明确指出信息短缺。\"\"\"\n",
    "\n",
    "    elif query_type == \"Opinion\":\n",
    "        system_prompt = \"\"\"您是观点整合型AI助手。\n",
    "    请基于提供的上下文，结合以下标准给出不同观点：\n",
    "    - 全面呈现不同立场观点\n",
    "    - 保持各观点表述的中立平衡，避免出现偏见\n",
    "    - 当上下文视角有限时，直接说明\"\"\"\n",
    "\n",
    "    elif query_type == \"Contextual\":\n",
    "        system_prompt = \"\"\"您是情境上下文感知型AI助手。\n",
    "    请结合查询背景与上下文信息：\n",
    "    - 建立问题情境与文档内容的关联\n",
    "    - 当上下文无法完全匹配具体情境时，请明确说明适配性限制\"\"\"\n",
    "\n",
    "    else:\n",
    "        system_prompt = \"\"\"您是通用型AI助手。请基于上下文回答问题，若信息不足请明确说明。\"\"\"\n",
    "\n",
    "    # 通过结合上下文和查询创建用户提示\n",
    "    user_prompt = f\"\"\"\n",
    "    上下文:\n",
    "    {context}\n",
    "\n",
    "    问题: {query}\n",
    "\n",
    "    请基于上下文提供专业可靠的回答。\n",
    "    \"\"\"\n",
    "\n",
    "    # 使用 OpenAI 生成响应\n",
    "    response = client.chat.completions.create(\n",
    "        model=llm_model,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": system_prompt},\n",
    "            {\"role\": \"user\", \"content\": user_prompt}\n",
    "        ],\n",
    "        temperature=0.2\n",
    "    )\n",
    "\n",
    "    # 返回生成的响应内容\n",
    "    return response.choices[0].message.content\n"
   ],
   "id": "1ee18d9ac7964b21",
   "outputs": [],
   "execution_count": 16
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 完整的自适应检索 RAG 流程",
   "id": "59f0b7b93d4798bf"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:20.130370Z",
     "start_time": "2025-04-25T09:50:20.123103Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def rag_with_adaptive_retrieval(pdf_path, query, k=4, user_context=None):\n",
    "    \"\"\"\n",
    "    完整的RAG管道，带有自适应检索功能。\n",
    "\n",
    "    Args:\n",
    "        pdf_path (str): PDF文档的路径\n",
    "        query (str): 用户查询\n",
    "        k (int): 要检索的文档数量\n",
    "        user_context (str): 可选的用户上下文\n",
    "\n",
    "    Returns:\n",
    "        Dict: 包含查询、检索到的文档、查询类型和响应的结果字典\n",
    "    \"\"\"\n",
    "    print(\"\\n=== RAG WITH ADAPTIVE RETRIEVAL ===\")\n",
    "    print(f\"Query: {query}\")  # 打印查询内容\n",
    "\n",
    "    # 处理文档以提取文本，将其分块，并创建嵌入向量\n",
    "    chunks, vector_store = process_document(pdf_path)\n",
    "\n",
    "    # 对查询进行分类以确定其类型\n",
    "    query_type = classify_query(query)\n",
    "    print(f\"Query classified as: {query_type}\")  # 打印查询被分类为的类型\n",
    "\n",
    "    # 根据查询类型使用自适应检索策略检索文档\n",
    "    retrieved_docs = adaptive_retrieval(query, vector_store, k, user_context)\n",
    "\n",
    "    # 根据查询、检索到的文档和查询类型生成响应\n",
    "    response = generate_response(query, retrieved_docs, query_type)\n",
    "\n",
    "    # 将结果编译成一个字典\n",
    "    result = {\n",
    "        \"query\": query,  # 用户查询\n",
    "        \"query_type\": query_type,  # 查询类型\n",
    "        \"retrieved_documents\": retrieved_docs,  # 检索到的文档\n",
    "        \"response\": response  # 生成的响应\n",
    "    }\n",
    "\n",
    "    print(\"\\n=== RESPONSE ===\")  # 打印响应标题\n",
    "    print(response)  # 打印生成的响应\n",
    "\n",
    "    return result  # 返回结果字典\n"
   ],
   "id": "d87b9e1069e93301",
   "outputs": [],
   "execution_count": 17
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 评价框架\n",
   "id": "9929790a6fc48f61"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:25.880124Z",
     "start_time": "2025-04-25T09:50:25.872129Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def evaluate_adaptive_vs_standard(pdf_path, test_queries, reference_answers=None):\n",
    "    \"\"\"\n",
    "    对比分析自适应检索与标准检索在测试查询集上的表现。\n",
    "\n",
    "    本函数实现以下评估流程：\n",
    "    1. 文档预处理与分块，构建向量存储\n",
    "    2. 并行执行标准检索与自适应检索\n",
    "    3. 双通道结果对比分析\n",
    "    4. 若存在参考答案，执行回答质量评估\n",
    "\n",
    "    Args:\n",
    "        pdf_path (str): 作为知识源的PDF文档路径\n",
    "        test_queries (List[str]): 用于评估两种检索方法的测试查询列表\n",
    "        reference_answers (List[str], 可选): 用于评估指标的参考答案列表\n",
    "\n",
    "    Returns:\n",
    "        Dict: 包含每个查询的单独结果和整体比较的评估结果\n",
    "    \"\"\"\n",
    "    print(\"=== 正在评估自适应检索与标准检索 ===\")\n",
    "\n",
    "    # 处理文档以提取文本，创建分块并构建向量存储\n",
    "    chunks, vector_store = process_document(pdf_path)\n",
    "\n",
    "    # 初始化用于存储比较结果的集合\n",
    "    results = []\n",
    "\n",
    "    # 对每个测试查询使用两种检索方法进行处理\n",
    "    for i, query in enumerate(test_queries):\n",
    "        print(f\"\\n\\n查询 {i+1}: {query}\")\n",
    "\n",
    "        # --- 标准检索方法 ---\n",
    "        print(\"\\n--- 标准检索 ---\")\n",
    "        # 为查询创建嵌入向量\n",
    "        query_embedding = create_embeddings(query)\n",
    "        # 使用简单的向量相似性检索文档\n",
    "        standard_docs = vector_store.similarity_search(query_embedding, k=4)\n",
    "        # 使用通用方法生成响应\n",
    "        standard_response = generate_response(query, standard_docs, \"General\")\n",
    "\n",
    "        # --- 自适应检索方法 ---\n",
    "        print(\"\\n--- 自适应检索 ---\")\n",
    "        # 对查询进行分类以确定其类型（事实型、分析型、意见型、上下文型）\n",
    "        query_type = classify_query(query)\n",
    "        # 使用适合此查询类型的策略检索文档\n",
    "        adaptive_docs = adaptive_retrieval(query, vector_store, k=4)\n",
    "        # 根据查询类型生成定制化的响应\n",
    "        adaptive_response = generate_response(query, adaptive_docs, query_type)\n",
    "\n",
    "        # 存储此查询的完整结果\n",
    "        result = {\n",
    "            \"query\": query,  # 查询内容\n",
    "            \"query_type\": query_type,  # 查询类型\n",
    "            \"standard_retrieval\": {  # 标准检索结果\n",
    "                \"documents\": standard_docs,  # 检索到的文档\n",
    "                \"response\": standard_response  # 生成的响应\n",
    "            },\n",
    "            \"adaptive_retrieval\": {  # 自适应检索结果\n",
    "                \"documents\": adaptive_docs,  # 检索到的文档\n",
    "                \"response\": adaptive_response  # 生成的响应\n",
    "            }\n",
    "        }\n",
    "\n",
    "        # 如果有可用的参考答案，则添加到结果中\n",
    "        if reference_answers and i < len(reference_answers):\n",
    "            result[\"reference_answer\"] = reference_answers[i]\n",
    "\n",
    "        results.append(result)  # 将结果添加到结果列表中\n",
    "\n",
    "        # 显示两种响应的简要预览以便快速比较\n",
    "        print(\"\\n--- 响应 ---\")\n",
    "        print(f\"标准: {standard_response[:200]}...\")  # 标准检索的响应前200个字符\n",
    "        print(f\"自适应: {adaptive_response[:200]}...\")  # 自适应检索的响应前200个字符\n",
    "\n",
    "    # 如果有参考答案，则计算比较指标\n",
    "    if reference_answers:\n",
    "        comparison = compare_responses(results)  # 调用 compare_responses 函数进行详细比较\n",
    "        print(\"\\n=== 评估结果 ===\")\n",
    "        print(comparison)  # 打印比较结果\n",
    "\n",
    "    # 返回完整的评估结果\n",
    "    return {\n",
    "        \"results\": results,  # 每个查询的详细结果\n",
    "        \"comparison\": comparison if reference_answers else \"未提供参考答案以进行评估\"  # 总体比较结果或提示信息\n",
    "    }\n"
   ],
   "id": "4bd6608cac60debf",
   "outputs": [],
   "execution_count": 18
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:27.887939Z",
     "start_time": "2025-04-25T09:50:27.882378Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def compare_responses(results):\n",
    "    \"\"\"\n",
    "    比较标准检索、自适应检索的响应与参考答案。\n",
    "\n",
    "    Args:\n",
    "        results (List[Dict]): 包含两种类型响应的结果列表\n",
    "\n",
    "    Returns:\n",
    "        str: 比较分析结果\n",
    "    \"\"\"\n",
    "    # 定义系统提示，指导AI如何比较响应\n",
    "    comparison_prompt = \"\"\"您是信息检索系统评估专家。\n",
    "    请对比分析标准检索与自适应检索对每个查询的响应质量。\n",
    "    评估维度需包含：\n",
    "    - 信息准确性\n",
    "    - 内容相关性\n",
    "    - 回答全面性\n",
    "    - 与参考答案的契合度（一致性）\n",
    "\n",
    "    要求提供每种方法的优势与不足的详细分析报告。\"\"\"\n",
    "\n",
    "    # 初始化对比文本的标题\n",
    "    comparison_text = \"# 标准检索与自适应检索效果评估\\n\\n\"\n",
    "\n",
    "    # 遍历每个结果以比较响应\n",
    "    for i, result in enumerate(results):\n",
    "        # 如果查询没有参考答案，则跳过\n",
    "        if \"reference_answer\" not in result:\n",
    "            continue\n",
    "\n",
    "        # 将查询详情添加到比较文本中\n",
    "        comparison_text += f\"## 查询 {i+1}: {result['query']}\\n\"\n",
    "        comparison_text += f\"*查询类型: {result['query_type']}*\\n\\n\"\n",
    "        comparison_text += f\"**参考答案:**\\n{result['reference_answer']}\\n\\n\"\n",
    "\n",
    "        # 将标准检索响应添加到比较文本中\n",
    "        comparison_text += f\"**标准检索响应:**\\n{result['standard_retrieval']['response']}\\n\\n\"\n",
    "\n",
    "        # 将自适应检索响应添加到比较文本中\n",
    "        comparison_text += f\"**自适应检索响应:**\\n{result['adaptive_retrieval']['response']}\\n\\n\"\n",
    "\n",
    "        # 创建用户提示，让AI比较这两种响应\n",
    "        user_prompt = f\"\"\"\n",
    "        参考答案：{result['reference_answer']}\n",
    "\n",
    "        标准检索响应：{result['standard_retrieval']['response']}\n",
    "\n",
    "        自适应检索响应：{result['adaptive_retrieval']['response']}\n",
    "\n",
    "        请从以下维度进行详细对比分析：\n",
    "        1. 核心事实的准确度差异\n",
    "        2. 上下文关联强度对比\n",
    "        3. 信息完整度评估\n",
    "        4. 与参考答案的语义契合度\n",
    "        \"\"\"\n",
    "\n",
    "        # 使用OpenAI客户端生成比较分析\n",
    "        response = client.chat.completions.create(\n",
    "            model=llm_model,\n",
    "            messages=[\n",
    "                {\"role\": \"system\", \"content\": comparison_prompt},\n",
    "                {\"role\": \"user\", \"content\": user_prompt}\n",
    "            ],\n",
    "            temperature=0.2\n",
    "        )\n",
    "\n",
    "        # 将AI的比较分析结果添加到比较文本中\n",
    "        comparison_text += f\"**比较分析:**\\n{response.choices[0].message.content}\\n\\n\"\n",
    "\n",
    "    return comparison_text  # 返回完整的比较分析文本\n"
   ],
   "id": "1e724b8a5b4666a2",
   "outputs": [],
   "execution_count": 19
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 评估自适应检索系统（自定义查询）",
   "id": "30d9d6d4e6374bdf"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:50:33.010251Z",
     "start_time": "2025-04-25T09:50:33.005183Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义涵盖不同查询类型的测试查询，以展示自适应检索如何处理各种查询意图\n",
    "test_queries = [\n",
    "    \"什么是可解释的人工智能（XAI）？\",           # 事实性查询 - 寻求定义/具体信息\n",
    "    # \"AI伦理和治理框架如何应对潜在的社会影响？\",  # 分析性查询 - 需要全面分析\n",
    "    # \"AI发展是否过快以至于无法进行适当监管？\",    # 意见性查询 - 寻求多样化观点\n",
    "    # \"可解释的AI如何帮助医疗决策？\",            # 上下文感知查询 - 从上下文中受益\n",
    "]\n",
    "\n",
    "# 更全面评估的参考答案\n",
    "# 这些可以用来客观地评估响应质量，与已知标准进行对比\n",
    "reference_answers = [\n",
    "    \"可解释的人工智能（XAI）旨在通过提供清晰的决策过程解释，使AI系统变得透明且易于理解。这有助于用户信任并有效管理AI技术。\",\n",
    "    # \"AI伦理和治理框架通过制定指南和原则来确保AI系统的负责任开发和使用，以应对潜在的社会影响。这些框架关注公平性、问责制、透明度以及保护人权，从而降低风险并促进有益的产出。\",\n",
    "    # \"关于AI发展是否过快而无法进行适当监管，意见不一。有些人认为快速进步超出了监管努力，可能导致潜在风险和伦理问题。另一些人则认为创新应保持当前速度，同时让法规与时俱进以应对新兴挑战。\",\n",
    "    # \"可解释的AI可以通过提供对AI驱动建议的透明且易于理解的见解，显著帮助医疗决策。这种透明性有助于医疗专业人员信任AI系统，做出明智决策，并通过理解AI建议背后的理由来改善患者结果。\"\n",
    "]\n"
   ],
   "id": "dd7c1b08372dab0b",
   "outputs": [],
   "execution_count": 20
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-25T09:52:06.027041Z",
     "start_time": "2025-04-25T09:50:36.873914Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 运行评估以比较自适应检索与标准检索\n",
    "# 这将使用两种方法处理每个查询并比较结果\n",
    "evaluation_results = evaluate_adaptive_vs_standard(\n",
    "    pdf_path=pdf_path,                  # 用于知识提取的源文档\n",
    "    test_queries=test_queries,          # 要评估的测试查询列表\n",
    "    reference_answers=reference_answers  # 可选的参考答案用于对比\n",
    ")\n",
    "\n",
    "print(evaluation_results)\n",
    "\n",
    "# 结果将显示标准检索和自适应检索在不同查询类型下的详细对比，\n",
    "# 突出显示自适应策略提供改进结果的地方\n",
    "print(\"评估结果\".center(80, \"=\"))\n",
    "print(evaluation_results[\"comparison\"])\n"
   ],
   "id": "2fcc31e060528de1",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== 正在评估自适应检索与标准检索 ===\n",
      "从PDF中提取文本...\n",
      "分割文本...\n",
      "创建了 13 个文本块\n",
      "为文本块创建嵌入向量...\n",
      "向向量存储中添加了 13 个文本块\n",
      "\n",
      "\n",
      "查询 1: 什么是可解释的人工智能（XAI）？\n",
      "\n",
      "--- 标准检索 ---\n",
      "\n",
      "--- 自适应检索 ---\n",
      "查询被分类为: Analytical\n",
      "执行分析性检索策略: '什么是可解释的人工智能（XAI）？'\n",
      "生成的子问题: ['1. 可解释的人工智能（XAI）与传统黑盒AI模型相比有哪些主要区别和优势？', '2. 可解释的人工智能（XAI）在实际应用中有哪些常见的技术和方法？', '3. 可解释的人工智能（XAI）在医疗、金融等关键领域如何帮助提高透明度和可信度？']\n",
      "\n",
      "--- 响应 ---\n",
      "标准: 可解释人工智能（XAI，Explainable AI）是人工智能领域的一个重要分支，旨在通过增强AI系统的透明性和可理解性，使人类能够理解其决策逻辑和内部运作机制。根据上下文，以下是关于XAI的专业解析：\n",
      "\n",
      "### 核心定义与目标\n",
      "XAI通过技术手段揭示传统\"黑箱\"模型（如深度学习）的决策过程，解决因模型复杂性导致的信任和问责问题。其核心目标是：\n",
      "1. **透明度**：展示模型如何从输入数据推导出...\n",
      "自适应: ### 可解释人工智能（XAI）的多维度深度解析\n",
      "\n",
      "#### 1. **核心定义与目标**\n",
      "可解释人工智能（XAI, Explainable Artificial Intelligence）是一类旨在提升AI系统透明度和决策可理解性的技术框架。其核心目标是解决传统AI（尤其是深度学习）的\"黑箱问题\"，通过揭示模型的内部逻辑，使用户能够理解：\n",
      "- **决策依据**：模型基于哪些输入特征或数据模式做出...\n",
      "\n",
      "=== 评估结果 ===\n",
      "# 标准检索与自适应检索效果评估\n",
      "\n",
      "## 查询 1: 什么是可解释的人工智能（XAI）？\n",
      "*查询类型: Analytical*\n",
      "\n",
      "**参考答案:**\n",
      "可解释的人工智能（XAI）旨在通过提供清晰的决策过程解释，使AI系统变得透明且易于理解。这有助于用户信任并有效管理AI技术。\n",
      "\n",
      "**标准检索响应:**\n",
      "可解释人工智能（XAI，Explainable AI）是人工智能领域的一个重要分支，旨在通过增强AI系统的透明性和可理解性，使人类能够理解其决策逻辑和内部运作机制。根据上下文，以下是关于XAI的专业解析：\n",
      "\n",
      "### 核心定义与目标\n",
      "XAI通过技术手段揭示传统\"黑箱\"模型（如深度学习）的决策过程，解决因模型复杂性导致的信任和问责问题。其核心目标是：\n",
      "1. **透明度**：展示模型如何从输入数据推导出输出结果。\n",
      "2. **可追溯性**：允许回溯关键决策步骤。\n",
      "3. **人类可理解**：以直观方式（如可视化、自然语言）解释技术细节。\n",
      "\n",
      "### 技术实现方向\n",
      "上下文提到XAI技术正在开发中，主要涉及：\n",
      "- **决策解释**：生成对特定预测的局部解释（如特征重要性分析）。\n",
      "- **模型简化**：使用可解释模型（如决策树）近似复杂模型的行为。\n",
      "- **过程可视化**：通过热力图、注意力机制等展示神经网络的内部关注点。\n",
      "\n",
      "### 应用价值\n",
      "1. **增强信任**：在医疗、金融等高风险领域，解释性可提升用户对AI建议的接受度。\n",
      "2. **伦理合规**：满足GDPR等法规对\"算法解释权\"的要求。\n",
      "3. **偏差检测**：通过解释机制识别训练数据中的潜在偏见（如种族或性别歧视）。\n",
      "\n",
      "### 挑战与发展\n",
      "- **解释精度权衡**：简化解释可能掩盖模型复杂性。\n",
      "- **评估标准缺失**：目前缺乏统一的解释质量衡量指标。\n",
      "- **跨学科需求**：需结合认知科学设计符合人类认知的解释形式。\n",
      "\n",
      "XAI是AI治理框架的关键组成部分（如上下文第五章所述），与边缘AI、量子计算等前沿方向共同构成负责任AI发展的重要支柱。其进步将直接影响AI在社会的可持续部署。\n",
      "\n",
      "**自适应检索响应:**\n",
      "### 可解释人工智能（XAI）的多维度深度解析\n",
      "\n",
      "#### 1. **核心定义与目标**\n",
      "可解释人工智能（XAI, Explainable Artificial Intelligence）是一类旨在提升AI系统透明度和决策可理解性的技术框架。其核心目标是解决传统AI（尤其是深度学习）的\"黑箱问题\"，通过揭示模型的内部逻辑，使用户能够理解：\n",
      "- **决策依据**：模型基于哪些输入特征或数据模式做出判断\n",
      "- **推理过程**：从输入到输出的中间推理链条\n",
      "- **置信度评估**：决策的可信度或不确定性量化\n",
      "\n",
      "#### 2. **技术实现维度**\n",
      "根据上下文提到的技术方向，XAI的实现路径包括：\n",
      "- **可视化工具**：如注意力热力图（显示图像分类中关注的像素区域）\n",
      "- **简化模型替代**：用决策树等可解释模型近似复杂模型的局部行为\n",
      "- **特征重要性分析**：通过SHAP值、LIME等方法量化输入特征对结果的影响\n",
      "- **因果推理**：建立变量间的因果关系而非仅相关性（上下文未明确提及但属前沿方向）\n",
      "\n",
      "#### 3. **伦理与社会必要性**\n",
      "上下文强调XAI与以下伦理问题的直接关联：\n",
      "- **偏见缓解**：通过透明化识别数据/算法中的歧视性模式（如信贷审批中的性别偏见）\n",
      "- **问责制**：满足GDPR等法规要求的\"算法解释权\"，明确责任主体\n",
      "- **信任建立**：医疗诊断等高风险场景中，医生需理解AI建议的医学依据\n",
      "\n",
      "#### 4. **应用场景挑战**\n",
      "- **性能-可解释性权衡**：通常模型复杂度与可解释性呈负相关（如深度神经网络vs逻辑回归）\n",
      "- **解释真实性**：某些解释方法可能产生误导性简化（信息缺口：未提及对抗性解释风险）\n",
      "- **用户认知差异**：需针对不同受众（工程师、监管者、普通用户）定制解释层级\n",
      "\n",
      "#### 5. **标准化与治理需求**\n",
      "上下文指出但未深入的方向：\n",
      "- **行业标准缺失**：目前缺乏统一的XAI评估指标（如解释 fidelity 的量化标准）\n",
      "- **跨学科协作**：需要伦理学家、心理学家参与设计\"人类可理解\"的解释形式\n",
      "\n",
      "#### 6. **未来发展方向**\n",
      "结合上下文的\"AI未来趋势\"部分：\n",
      "- **边缘AI集成**：在设备端实现实时解释（如自动驾驶的即时决策说明）\n",
      "- **人机协作增强**：通过XAI建立人类与AI的共识认知框架\n",
      "- **量子计算影响**：可能催生新型可解释量子机器学习模型（信息缺口：当前研究尚未明确）\n",
      "\n",
      "#### 系统建议\n",
      "当前XAI发展需优先解决：\n",
      "1. 建立分场景的可解释性标准（医疗vs金融vs军事）\n",
      "2. 开发兼顾性能和解释深度的新型架构\n",
      "3. 加强用户研究，避免\"解释幻觉\"（形式上可理解但实质无意义）\n",
      "\n",
      "该分析整合了上下文的技术描述、伦理章节及未来趋势，同时标明了需进一步研究的空白领域。\n",
      "\n",
      "**比较分析:**\n",
      "### 标准检索与自适应检索响应质量对比分析报告\n",
      "\n",
      "#### 1. 核心事实的准确度差异\n",
      "**标准检索**：\n",
      "- 准确复现了XAI的核心定义（透明性、可理解性）和技术目标（决策解释、模型简化等）\n",
      "- 严格遵循上下文的技术描述，未引入外部假设\n",
      "- 对挑战的表述与行业共识一致（如解释精度权衡）\n",
      "\n",
      "**自适应检索**：\n",
      "- 在保持基础事实准确性的同时，扩展了技术实现维度（如新增因果推理）\n",
      "- 主动补充上下文未明确提及但相关的前沿方向（量子计算影响）\n",
      "- 存在轻微风险：关于\"解释幻觉\"的表述缺乏上下文直接支持\n",
      "\n",
      "**对比**：两者均达到专业级准确度，但自适应检索通过合理外延展现了更强的知识整合能力。\n",
      "\n",
      "#### 2. 上下文关联强度对比\n",
      "**标准检索**：\n",
      "- 严格绑定上下文提供的技术方向（可视化、模型简化）\n",
      "- 直接引用上下文结构（如\"第五章所述\"）\n",
      "- 应用场景与上下文提到的医疗/金融领域完全对应\n",
      "\n",
      "**自适应检索**：\n",
      "- 动态建立跨章节关联（如连接伦理章节与未来趋势）\n",
      "- 通过\"信息缺口\"标注主动识别上下文未覆盖领域\n",
      "- 新增的边缘AI案例与上下文\"设备端部署\"理念隐含呼应\n",
      "\n",
      "**对比**：标准检索更忠实于原文结构，自适应检索展现出更强的上下文语义网络构建能力。\n",
      "\n",
      "#### 3. 信息完整度评估\n",
      "**标准检索**：\n",
      "- 覆盖参考答案所有关键要素（定义、技术、价值）\n",
      "- 提供标准的技术分类（局部解释/全局解释）\n",
      "- 缺少对\"不同受众需求\"的差异化分析\n",
      "\n",
      "**自适应检索**：\n",
      "- 系统性补充参考答案未提及的维度（标准化需求、认知差异）\n",
      "- 建立技术-伦理-治理的完整分析框架\n",
      "- 通过\"系统建议\"部分提升可操作性\n",
      "\n",
      "**对比**：自适应检索的信息完整度显著优于标准检索（覆盖度+35%），尤其在跨学科整合方面。\n",
      "\n",
      "#### 4. 与参考答案的语义契合度\n",
      "**标准检索**：\n",
      "- 与参考答案的术语使用高度一致（透明性、可追溯性）\n",
      "- 价值表述几乎逐点对应（信任、合规、偏差检测）\n",
      "- 严格保持学术中立性，与参考答案风格完全匹配\n",
      "\n",
      "**自适应检索**：\n",
      "- 在保持核心语义的基础上进行适度延伸（如增加\"共识认知框架\"）\n",
      "- 通过分级标题提升逻辑显性化程度\n",
      "- 部分新增内容（如量子计算）超出参考答案范围但未冲突\n",
      "\n",
      "**对比**：标准检索在表面一致性上略优（契合度98% vs 92%），但自适应检索实现了更深层的概念发展。\n",
      "\n",
      "---\n",
      "\n",
      "### 综合评估结论\n",
      "\n",
      "**标准检索优势**：\n",
      "1. 事实表述的绝对可靠性\n",
      "2. 与参考答案的逐点对应能力\n",
      "3. 适合需要严格引用的学术场景\n",
      "\n",
      "**标准检索不足**：\n",
      "1. 缺乏对上下文隐含逻辑的挖掘\n",
      "2. 应对开放性问题时扩展性有限\n",
      "3. 信息组织方式较为传统\n",
      "\n",
      "**自适应检索优势**：\n",
      "1. 动态构建知识关联网络\n",
      "2. 显著提升决策支持价值\n",
      "3. 更符合实际应用场景需求\n",
      "\n",
      "**自适应检索风险**：\n",
      "1. 需谨慎控制合理外延边界\n",
      "2. 对上下文理解能力要求更高\n",
      "3. 可能不适合法规合规等严格引用场景\n",
      "\n",
      "**改进建议**：\n",
      "- 标准检索可增加\"关联建议\"模块提升实用性\n",
      "- 自适应检索应添加外延内容的风险等级标注\n",
      "- 两者均可通过可视化技术（如知识图谱）增强解释效果\n",
      "\n",
      "\n",
      "{'results': [{'query': '什么是可解释的人工智能（XAI）？', 'query_type': 'Analytical', 'standard_retrieval': {'documents': [{'text': '问题也随之⽽来。为⼈⼯智能的开发\\n和部署建⽴清晰的指导⽅针和道德框架⾄关重要。\\n⼈⼯智能武器化\\n⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相\\n关法规，以应对⼈⼯智能武器的相关⻛险。\\n第五章：⼈⼯智能的未来\\n⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括：\\n可解释⼈⼯智能（XAI）\\n可解释⼈⼯智能 (XAI) 旨在使⼈⼯智能系统更加透明易懂。XAI 技术正在开发中，旨在深⼊了解⼈\\n⼯智能模型的决策⽅式，从⽽增强信任度和责任感。\\n边缘⼈⼯智能\\n边缘⼈⼯智能是指在设备上本地处理数据，⽽不是依赖云服务器。这种⽅法可以减少延迟，增强隐\\n私保护，并在连接受限的环境中⽀持⼈⼯智能应⽤。\\n量⼦计算和⼈⼯智能\\n量⼦计算有望显著加速⼈⼯智能算法，从⽽推动药物研发、材料科学和优化等领域的突破。量⼦计\\n算与⼈⼯智能的交叉研究前景⼴阔。\\n⼈机协作\\n⼈⼯智能的未来很可能涉及⼈类与⼈⼯智能系统之间更紧密的协作。这包括开发能够增强⼈类能\\n⼒、⽀持决策和提⾼⽣产⼒的⼈⼯智能⼯具。\\n⼈⼯智能造福社会\\n⼈⼯智能正⽇益被⽤于应对社会和环境挑战，例如⽓候变化、贫困和医疗保健差距。“⼈⼯智能造\\n福社会”倡议旨在利⽤⼈⼯智能产⽣积极影响。\\n监管与治理\\n随着⼈⼯智能⽇益普及，监管和治理的需求将⽇益增⻓，以确保负责任的开发和部署。这包括制定\\n道德准则、解决偏⻅和公平问题，以及保护隐私和安全。国际标准合作⾄关重要。\\n通过了解⼈⼯智能的核⼼概念、应⽤、伦理影响和未来发展⽅向，我们可以更好地应对这项变⾰性\\n技术带来的机遇和挑战。持续的研究、负责任的开发和周到的治理，对于充分发挥⼈⼯智能的潜⼒\\n并降低其⻛险⾄关重要。\\n第六章：⼈⼯智能和机器⼈技术\\n⼈⼯智能与机器⼈技术的融合\\n⼈⼯智能与机器⼈技术的融合，将机器⼈的物理能⼒与⼈⼯智能的认知能⼒完美结合。这种协同效\\n应使机器⼈能够执⾏复杂的任务，适应不断变化的环境，并与⼈类更⾃然地互动。⼈⼯智能机器⼈\\n⼴泛应⽤于制造业、医疗保健、物流和勘探领域。\\n机器⼈的类型\\n⼯业机器⼈\\n⼯业机器⼈在制造业中⽤于执⾏焊接、喷漆、装配和物料搬运等任务。⼈⼯智能提升了它们的精\\n度、效率和适应性，使它们能够在协作环境中与⼈类并肩⼯作（协作机器⼈）。\\n服务机器⼈\\n服务机器⼈协助⼈类完成各种任务，包括清洁、送货、客⼾服务和医疗', 'metadata': {'index': 3, 'source': 'data/AI_Information.en.zh-CN.pdf'}, 'similarity': np.float64(0.8295798348105253)}, {'text': '改变交通运输。⾃动驾驶\\n汽⻋利⽤⼈  ⼯智能感知周围环境、做出驾驶决策并安全⾏驶。\\n零售\\n零售⾏业利⽤⼈⼯智能进⾏个性化推荐、库存管理、客服聊天机器⼈和供应链优化。⼈⼯智能系统\\n可以分析客⼾数据，预测需求、提供个性化优惠并改善购物体验。\\n制造业\\n⼈⼯智能在制造业中⽤于预测性维护、质量控制、流程优化和机器⼈技术。⼈⼯智能系统可以监控\\n设备、检测异常并⾃动执⾏任务，从⽽提⾼效率并降低成本。\\n教育\\n⼈⼯智能正在通过个性化学习平台、⾃动评分系统和虚拟导师提升教育⽔平。⼈⼯智能⼯具可以适\\n应学⽣的个性化需求，提供反馈，并打造定制化的学习体验。\\n娱乐\\n娱乐⾏业将⼈⼯智能⽤于内容推荐、游戏开发和虚拟现实体验。⼈⼯智能算法分析⽤⼾偏好，推荐\\n电影、⾳乐和游戏，从⽽增强⽤⼾参与度。\\n⽹络安全\\n⼈⼯智能在⽹络安全领域⽤于检测和应对威胁、分析⽹络流量以及识别漏洞。⼈⼯智能系统可以⾃\\n动执⾏安全任务，提⾼威胁检测的准确性，并增强整体⽹络安全态势。\\n第四章：⼈⼯智能的伦理和社会影响\\n⼈⼯智能的快速发展和部署引发了重⼤的伦理和社会担忧。这些担忧包括：\\n偏⻅与公平\\n⼈⼯智能系统可能会继承并放⼤其训练数据中存在的偏⻅，从⽽导致不公平或歧视性的结果。确保\\n⼈⼯智能系统的公平性并减少偏⻅是⼀项关键挑战。\\n透明度和可解释性\\n许多⼈⼯智能系统，尤其是深度学习模型，都是“⿊匣⼦”，很难理解它们是如何做出决策的。增\\n强透明度和可解释性对于建⽴信任和问责⾄关重要。\\n隐私和安全\\n⼈⼯智能系统通常依赖⼤量数据，这引发了⼈们对隐私和数据安全的担忧。保护敏感信息并确保负\\n责任的数据处理⾄关重要。\\n⼯作岗位流失\\n⼈⼯智能的⾃动化能⼒引发了⼈们对⼯作岗位流失的担忧，尤其是在重复性或常规性任务的⾏业。\\n应对⼈⼯智能驱动的⾃动化带来的潜在经济和社会影响是⼀项关键挑战。\\n⾃主与控制\\n随着⼈⼯智能系统⽇益⾃主，控制、问责以及潜在意外后果的问题也随之⽽来。为⼈⼯智能的开发\\n和部署建⽴清晰的指导⽅针和道德框架⾄关重要。\\n⼈⼯智能武器化\\n⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相\\n关法规，以应对⼈⼯智能武器的相关⻛险。\\n第五章：⼈⼯智能的未来\\n⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括：\\n可解释⼈⼯智能（XAI）\\n可解释⼈⼯智能 (XAI) 旨在使⼈⼯智', 'metadata': {'index': 2, 'source': 'data/AI_Information.en.zh-CN.pdf'}, 'similarity': np.float64(0.8154168494922168)}, {'text': '透明、负责且有\\n益于社会。关键原则包括尊重⼈权、隐私、不歧视和仁慈。\\n解决⼈⼯智能中的偏⻅\\n⼈⼯智能系统可能会继承并放⼤其训练数据中存在的偏⻅，从⽽导致不公平或歧视性的结果。解决\\n偏⻅需要谨慎的数据收集、算法设计以及持续的监测和评估。\\n透明度和可解释性\\n透明度和可解释性对于建⽴对⼈⼯智能系统的信任⾄关重要。可解释⼈⼯智能 (XAI) 技术旨在使⼈\\n⼯智能决策更易于理解，使⽤⼾能够评估其公平性和准确性。\\n隐私和数据保护\\n⼈⼯智能系统通常依赖⼤量数据，这引发了⼈们对隐私和数据保护的担忧。确保负责任的数据处\\n理、实施隐私保护技术以及遵守数据保护法规⾄关重要。\\n问责与责任\\n建⽴⼈⼯智能系统的问责制和责任制，对于应对潜在危害和确保道德⾏为⾄关重要。这包括明确⼈\\n⼯智能系统开发者、部署者和⽤⼾的⻆⾊和职责。\\n第 20 章：建⽴对⼈⼯智能的信任\\n透明度和可解释性\\n透明度和可解释性是建⽴⼈⼯智能信任的关键。让⼈⼯智能系统易于理解，并深⼊了解其决策过\\n程，有助于⽤⼾评估其可靠性和公平性。\\n稳健性和可靠性\\n确保⼈⼯智能系统的稳健可靠对于建⽴信任⾄关重要。这包括测试和验证⼈⼯智能模型、监控其性\\n能以及解决潜在的漏洞。\\n⽤⼾控制和代理\\n赋予⽤⼾对AI系统的控制权，并赋予他们与AI交互的⾃主权，可以增强信任。这包括允许⽤⼾⾃定\\n义AI设置、了解其数据的使⽤⽅式，以及选择退出AI驱动的功能。\\n道德设计与发展\\n将伦理考量纳⼊⼈⼯智能系统的设计和开发对于建⽴信任⾄关重要。这包括进⾏伦理影响评估、与\\n利益相关者沟通，以及遵守伦理准则和标准。\\n公众参与和教育\\n让公众参与⼈⼯智能的讨论，并教育他们了解其能⼒、局限性和伦理影响，有助于建⽴信任。公众\\n意识宣传活动、教育计划和开放式对话有助于促进公众对⼈⼯智能的理解和接受。\\n第 21 章：⼈⼯智能的前进之路\\n持续研究与创新\\n持续的研究和创新对于提升⼈⼯智能能⼒、应对挑战并充分发挥其潜⼒⾄关重要。这包括投资基础\\n研究、应⽤研究以及新型⼈⼯智能技术和应⽤的开发。\\n负责任的开发和部署\\n负责任地开发和部署⼈⼯智能对于确保其效益得到⼴泛共享并降低其⻛险⾄关重要。这涉及遵守伦\\n理原则、促进公平透明以及保护⼈权和价值观。\\n全球协作与合作\\n全球协作与合作对于应对⼈⼯智能带来的全球挑战和机遇⾄关重要。这包括共享知识、制定标准以\\n及跨境推⼴负责任的⼈⼯智能实践。\\n教育和劳动⼒发', 'metadata': {'index': 11, 'source': 'data/AI_Information.en.zh-CN.pdf'}, 'similarity': np.float64(0.8117122329794385)}, {'text': '理解⼈⼯智能\\n第⼀章：⼈⼯智能简介\\n⼈⼯智能 (AI) 是指数字计算机或计算机控制的机器⼈执⾏通常与智能⽣物相关的任务的能⼒。该术\\n语通常⽤于开发具有⼈类特有的智⼒过程的系统，例如推理、发现意义、概括或从过往经验中学习\\n的能⼒。在过去的⼏⼗年中，计算能⼒和数据可⽤性的进步显著加速了⼈⼯智能的开发和部署。\\n历史背景\\n⼈⼯智能的概念已存在数个世纪，经常出现在神话和⼩说中。然⽽，⼈⼯智能研究的正式领域始于\\n20世纪中叶。1956年的达特茅斯研讨会被⼴泛认为是⼈⼯智能的发源地。早期的⼈⼯智能研究侧\\n重于问题解决和符号⽅法。20世纪80年代专家系统兴起，⽽20世纪90年代和21世纪初，机器学习\\n和神经⽹络取得了进步。深度学习的最新突破彻底改变了这⼀领域。\\n现代观察\\n现代⼈⼯智能系统在⽇常⽣活中⽇益普及。从 Siri 和 Alexa 等虚拟助⼿，到流媒体服务和社交媒体\\n上的推荐算法，⼈⼯智能正在影响我们的⽣活、⼯作和互动⽅式。⾃动驾驶汽⻋、先进的医疗诊断\\n技术以及复杂的⾦融建模⼯具的发展，彰显了⼈⼯智能应⽤的⼴泛性和持续增⻓。此外，⼈们对其\\n伦理影响、偏⻅和失业的担忧也⽇益凸显。\\n第⼆章：⼈⼯智能的核⼼概念\\n机器学习\\n机器学习 (ML) 是⼈⼯智能的⼀个分⽀，专注于使系统⽆需明确编程即可从数据中学习。机器学习\\n算法能够识别模式、做出预测，并随着接触更多数据⽽不断提升其性能。\\n监督学习\\n在监督学习中，算法基于标记数据进⾏训练，其中输⼊数据与正确的输出配对。这使得算法能够学\\n习输⼊和输出之间的关系，并对新的、未知的数据进⾏预测。⽰例包括图像分类和垃圾邮件检测。\\n⽆监督学习\\n⽆监督学习算法基于未标记数据进⾏训练，算法必须在没有明确指导的情况下发现数据中的模式和\\n结构。常⽤技术包括聚类（将相似的数据点分组）和降维（在保留重要信息的同时减少变量数\\n量）。\\n从英语翻译成中⽂(简体) - www.onlinedoctranslator.com\\n强化学习\\n强化学习涉及训练代理在特定环境中做出决策，以最⼤化奖励。代理通过反复试验进⾏学习，并以\\n奖励或惩罚的形式接收反馈。这种⽅法应⽤于游戏、机器⼈技术和资源管理。\\n深度学习\\n深度学习是机器学习的⼀个⼦领域，它使⽤多层⼈⼯神经⽹络（深度神经⽹络）来分析数据。这些\\n⽹络的设计灵感来源于⼈脑的结构和功能。深度学习在图像识别、⾃然语⾔处理和语⾳识别等领域\\n', 'metadata': {'index': 0, 'source': 'data/AI_Information.en.zh-CN.pdf'}, 'similarity': np.float64(0.809628560201034)}], 'response': '可解释人工智能（XAI，Explainable AI）是人工智能领域的一个重要分支，旨在通过增强AI系统的透明性和可理解性，使人类能够理解其决策逻辑和内部运作机制。根据上下文，以下是关于XAI的专业解析：\\n\\n### 核心定义与目标\\nXAI通过技术手段揭示传统\"黑箱\"模型（如深度学习）的决策过程，解决因模型复杂性导致的信任和问责问题。其核心目标是：\\n1. **透明度**：展示模型如何从输入数据推导出输出结果。\\n2. **可追溯性**：允许回溯关键决策步骤。\\n3. **人类可理解**：以直观方式（如可视化、自然语言）解释技术细节。\\n\\n### 技术实现方向\\n上下文提到XAI技术正在开发中，主要涉及：\\n- **决策解释**：生成对特定预测的局部解释（如特征重要性分析）。\\n- **模型简化**：使用可解释模型（如决策树）近似复杂模型的行为。\\n- **过程可视化**：通过热力图、注意力机制等展示神经网络的内部关注点。\\n\\n### 应用价值\\n1. **增强信任**：在医疗、金融等高风险领域，解释性可提升用户对AI建议的接受度。\\n2. **伦理合规**：满足GDPR等法规对\"算法解释权\"的要求。\\n3. **偏差检测**：通过解释机制识别训练数据中的潜在偏见（如种族或性别歧视）。\\n\\n### 挑战与发展\\n- **解释精度权衡**：简化解释可能掩盖模型复杂性。\\n- **评估标准缺失**：目前缺乏统一的解释质量衡量指标。\\n- **跨学科需求**：需结合认知科学设计符合人类认知的解释形式。\\n\\nXAI是AI治理框架的关键组成部分（如上下文第五章所述），与边缘AI、量子计算等前沿方向共同构成负责任AI发展的重要支柱。其进步将直接影响AI在社会的可持续部署。'}, 'adaptive_retrieval': {'documents': [{'text': '问题也随之⽽来。为⼈⼯智能的开发\\n和部署建⽴清晰的指导⽅针和道德框架⾄关重要。\\n⼈⼯智能武器化\\n⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相\\n关法规，以应对⼈⼯智能武器的相关⻛险。\\n第五章：⼈⼯智能的未来\\n⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括：\\n可解释⼈⼯智能（XAI）\\n可解释⼈⼯智能 (XAI) 旨在使⼈⼯智能系统更加透明易懂。XAI 技术正在开发中，旨在深⼊了解⼈\\n⼯智能模型的决策⽅式，从⽽增强信任度和责任感。\\n边缘⼈⼯智能\\n边缘⼈⼯智能是指在设备上本地处理数据，⽽不是依赖云服务器。这种⽅法可以减少延迟，增强隐\\n私保护，并在连接受限的环境中⽀持⼈⼯智能应⽤。\\n量⼦计算和⼈⼯智能\\n量⼦计算有望显著加速⼈⼯智能算法，从⽽推动药物研发、材料科学和优化等领域的突破。量⼦计\\n算与⼈⼯智能的交叉研究前景⼴阔。\\n⼈机协作\\n⼈⼯智能的未来很可能涉及⼈类与⼈⼯智能系统之间更紧密的协作。这包括开发能够增强⼈类能\\n⼒、⽀持决策和提⾼⽣产⼒的⼈⼯智能⼯具。\\n⼈⼯智能造福社会\\n⼈⼯智能正⽇益被⽤于应对社会和环境挑战，例如⽓候变化、贫困和医疗保健差距。“⼈⼯智能造\\n福社会”倡议旨在利⽤⼈⼯智能产⽣积极影响。\\n监管与治理\\n随着⼈⼯智能⽇益普及，监管和治理的需求将⽇益增⻓，以确保负责任的开发和部署。这包括制定\\n道德准则、解决偏⻅和公平问题，以及保护隐私和安全。国际标准合作⾄关重要。\\n通过了解⼈⼯智能的核⼼概念、应⽤、伦理影响和未来发展⽅向，我们可以更好地应对这项变⾰性\\n技术带来的机遇和挑战。持续的研究、负责任的开发和周到的治理，对于充分发挥⼈⼯智能的潜⼒\\n并降低其⻛险⾄关重要。\\n第六章：⼈⼯智能和机器⼈技术\\n⼈⼯智能与机器⼈技术的融合\\n⼈⼯智能与机器⼈技术的融合，将机器⼈的物理能⼒与⼈⼯智能的认知能⼒完美结合。这种协同效\\n应使机器⼈能够执⾏复杂的任务，适应不断变化的环境，并与⼈类更⾃然地互动。⼈⼯智能机器⼈\\n⼴泛应⽤于制造业、医疗保健、物流和勘探领域。\\n机器⼈的类型\\n⼯业机器⼈\\n⼯业机器⼈在制造业中⽤于执⾏焊接、喷漆、装配和物料搬运等任务。⼈⼯智能提升了它们的精\\n度、效率和适应性，使它们能够在协作环境中与⼈类并肩⼯作（协作机器⼈）。\\n服务机器⼈\\n服务机器⼈协助⼈类完成各种任务，包括清洁、送货、客⼾服务和医疗', 'metadata': {'index': 3, 'source': 'data/AI_Information.en.zh-CN.pdf'}, 'similarity': np.float64(0.8267580434895638)}, {'text': '透明、负责且有\\n益于社会。关键原则包括尊重⼈权、隐私、不歧视和仁慈。\\n解决⼈⼯智能中的偏⻅\\n⼈⼯智能系统可能会继承并放⼤其训练数据中存在的偏⻅，从⽽导致不公平或歧视性的结果。解决\\n偏⻅需要谨慎的数据收集、算法设计以及持续的监测和评估。\\n透明度和可解释性\\n透明度和可解释性对于建⽴对⼈⼯智能系统的信任⾄关重要。可解释⼈⼯智能 (XAI) 技术旨在使⼈\\n⼯智能决策更易于理解，使⽤⼾能够评估其公平性和准确性。\\n隐私和数据保护\\n⼈⼯智能系统通常依赖⼤量数据，这引发了⼈们对隐私和数据保护的担忧。确保负责任的数据处\\n理、实施隐私保护技术以及遵守数据保护法规⾄关重要。\\n问责与责任\\n建⽴⼈⼯智能系统的问责制和责任制，对于应对潜在危害和确保道德⾏为⾄关重要。这包括明确⼈\\n⼯智能系统开发者、部署者和⽤⼾的⻆⾊和职责。\\n第 20 章：建⽴对⼈⼯智能的信任\\n透明度和可解释性\\n透明度和可解释性是建⽴⼈⼯智能信任的关键。让⼈⼯智能系统易于理解，并深⼊了解其决策过\\n程，有助于⽤⼾评估其可靠性和公平性。\\n稳健性和可靠性\\n确保⼈⼯智能系统的稳健可靠对于建⽴信任⾄关重要。这包括测试和验证⼈⼯智能模型、监控其性\\n能以及解决潜在的漏洞。\\n⽤⼾控制和代理\\n赋予⽤⼾对AI系统的控制权，并赋予他们与AI交互的⾃主权，可以增强信任。这包括允许⽤⼾⾃定\\n义AI设置、了解其数据的使⽤⽅式，以及选择退出AI驱动的功能。\\n道德设计与发展\\n将伦理考量纳⼊⼈⼯智能系统的设计和开发对于建⽴信任⾄关重要。这包括进⾏伦理影响评估、与\\n利益相关者沟通，以及遵守伦理准则和标准。\\n公众参与和教育\\n让公众参与⼈⼯智能的讨论，并教育他们了解其能⼒、局限性和伦理影响，有助于建⽴信任。公众\\n意识宣传活动、教育计划和开放式对话有助于促进公众对⼈⼯智能的理解和接受。\\n第 21 章：⼈⼯智能的前进之路\\n持续研究与创新\\n持续的研究和创新对于提升⼈⼯智能能⼒、应对挑战并充分发挥其潜⼒⾄关重要。这包括投资基础\\n研究、应⽤研究以及新型⼈⼯智能技术和应⽤的开发。\\n负责任的开发和部署\\n负责任地开发和部署⼈⼯智能对于确保其效益得到⼴泛共享并降低其⻛险⾄关重要。这涉及遵守伦\\n理原则、促进公平透明以及保护⼈权和价值观。\\n全球协作与合作\\n全球协作与合作对于应对⼈⼯智能带来的全球挑战和机遇⾄关重要。这包括共享知识、制定标准以\\n及跨境推⼴负责任的⼈⼯智能实践。\\n教育和劳动⼒发', 'metadata': {'index': 11, 'source': 'data/AI_Information.en.zh-CN.pdf'}, 'similarity': np.float64(0.820318619999941)}, {'text': '改变交通运输。⾃动驾驶\\n汽⻋利⽤⼈  ⼯智能感知周围环境、做出驾驶决策并安全⾏驶。\\n零售\\n零售⾏业利⽤⼈⼯智能进⾏个性化推荐、库存管理、客服聊天机器⼈和供应链优化。⼈⼯智能系统\\n可以分析客⼾数据，预测需求、提供个性化优惠并改善购物体验。\\n制造业\\n⼈⼯智能在制造业中⽤于预测性维护、质量控制、流程优化和机器⼈技术。⼈⼯智能系统可以监控\\n设备、检测异常并⾃动执⾏任务，从⽽提⾼效率并降低成本。\\n教育\\n⼈⼯智能正在通过个性化学习平台、⾃动评分系统和虚拟导师提升教育⽔平。⼈⼯智能⼯具可以适\\n应学⽣的个性化需求，提供反馈，并打造定制化的学习体验。\\n娱乐\\n娱乐⾏业将⼈⼯智能⽤于内容推荐、游戏开发和虚拟现实体验。⼈⼯智能算法分析⽤⼾偏好，推荐\\n电影、⾳乐和游戏，从⽽增强⽤⼾参与度。\\n⽹络安全\\n⼈⼯智能在⽹络安全领域⽤于检测和应对威胁、分析⽹络流量以及识别漏洞。⼈⼯智能系统可以⾃\\n动执⾏安全任务，提⾼威胁检测的准确性，并增强整体⽹络安全态势。\\n第四章：⼈⼯智能的伦理和社会影响\\n⼈⼯智能的快速发展和部署引发了重⼤的伦理和社会担忧。这些担忧包括：\\n偏⻅与公平\\n⼈⼯智能系统可能会继承并放⼤其训练数据中存在的偏⻅，从⽽导致不公平或歧视性的结果。确保\\n⼈⼯智能系统的公平性并减少偏⻅是⼀项关键挑战。\\n透明度和可解释性\\n许多⼈⼯智能系统，尤其是深度学习模型，都是“⿊匣⼦”，很难理解它们是如何做出决策的。增\\n强透明度和可解释性对于建⽴信任和问责⾄关重要。\\n隐私和安全\\n⼈⼯智能系统通常依赖⼤量数据，这引发了⼈们对隐私和数据安全的担忧。保护敏感信息并确保负\\n责任的数据处理⾄关重要。\\n⼯作岗位流失\\n⼈⼯智能的⾃动化能⼒引发了⼈们对⼯作岗位流失的担忧，尤其是在重复性或常规性任务的⾏业。\\n应对⼈⼯智能驱动的⾃动化带来的潜在经济和社会影响是⼀项关键挑战。\\n⾃主与控制\\n随着⼈⼯智能系统⽇益⾃主，控制、问责以及潜在意外后果的问题也随之⽽来。为⼈⼯智能的开发\\n和部署建⽴清晰的指导⽅针和道德框架⾄关重要。\\n⼈⼯智能武器化\\n⼈⼯智能在⾃主武器系统中的潜在应⽤引发了重⼤的伦理和安全担忧。需要开展国际讨论并制定相\\n关法规，以应对⼈⼯智能武器的相关⻛险。\\n第五章：⼈⼯智能的未来\\n⼈⼯智能的未来很可能以持续进步和在各个领域的⼴泛应⽤为特征。关键趋势和发展领域包括：\\n可解释⼈⼯智能（XAI）\\n可解释⼈⼯智能 (XAI) 旨在使⼈⼯智', 'metadata': {'index': 2, 'source': 'data/AI_Information.en.zh-CN.pdf'}, 'similarity': np.float64(0.8269054645643056)}, {'text': '理解⼈⼯智能\\n第⼀章：⼈⼯智能简介\\n⼈⼯智能 (AI) 是指数字计算机或计算机控制的机器⼈执⾏通常与智能⽣物相关的任务的能⼒。该术\\n语通常⽤于开发具有⼈类特有的智⼒过程的系统，例如推理、发现意义、概括或从过往经验中学习\\n的能⼒。在过去的⼏⼗年中，计算能⼒和数据可⽤性的进步显著加速了⼈⼯智能的开发和部署。\\n历史背景\\n⼈⼯智能的概念已存在数个世纪，经常出现在神话和⼩说中。然⽽，⼈⼯智能研究的正式领域始于\\n20世纪中叶。1956年的达特茅斯研讨会被⼴泛认为是⼈⼯智能的发源地。早期的⼈⼯智能研究侧\\n重于问题解决和符号⽅法。20世纪80年代专家系统兴起，⽽20世纪90年代和21世纪初，机器学习\\n和神经⽹络取得了进步。深度学习的最新突破彻底改变了这⼀领域。\\n现代观察\\n现代⼈⼯智能系统在⽇常⽣活中⽇益普及。从 Siri 和 Alexa 等虚拟助⼿，到流媒体服务和社交媒体\\n上的推荐算法，⼈⼯智能正在影响我们的⽣活、⼯作和互动⽅式。⾃动驾驶汽⻋、先进的医疗诊断\\n技术以及复杂的⾦融建模⼯具的发展，彰显了⼈⼯智能应⽤的⼴泛性和持续增⻓。此外，⼈们对其\\n伦理影响、偏⻅和失业的担忧也⽇益凸显。\\n第⼆章：⼈⼯智能的核⼼概念\\n机器学习\\n机器学习 (ML) 是⼈⼯智能的⼀个分⽀，专注于使系统⽆需明确编程即可从数据中学习。机器学习\\n算法能够识别模式、做出预测，并随着接触更多数据⽽不断提升其性能。\\n监督学习\\n在监督学习中，算法基于标记数据进⾏训练，其中输⼊数据与正确的输出配对。这使得算法能够学\\n习输⼊和输出之间的关系，并对新的、未知的数据进⾏预测。⽰例包括图像分类和垃圾邮件检测。\\n⽆监督学习\\n⽆监督学习算法基于未标记数据进⾏训练，算法必须在没有明确指导的情况下发现数据中的模式和\\n结构。常⽤技术包括聚类（将相似的数据点分组）和降维（在保留重要信息的同时减少变量数\\n量）。\\n从英语翻译成中⽂(简体) - www.onlinedoctranslator.com\\n强化学习\\n强化学习涉及训练代理在特定环境中做出决策，以最⼤化奖励。代理通过反复试验进⾏学习，并以\\n奖励或惩罚的形式接收反馈。这种⽅法应⽤于游戏、机器⼈技术和资源管理。\\n深度学习\\n深度学习是机器学习的⼀个⼦领域，它使⽤多层⼈⼯神经⽹络（深度神经⽹络）来分析数据。这些\\n⽹络的设计灵感来源于⼈脑的结构和功能。深度学习在图像识别、⾃然语⾔处理和语⾳识别等领域\\n', 'metadata': {'index': 0, 'source': 'data/AI_Information.en.zh-CN.pdf'}, 'similarity': np.float64(0.809628560201034)}], 'response': '### 可解释人工智能（XAI）的多维度深度解析\\n\\n#### 1. **核心定义与目标**\\n可解释人工智能（XAI, Explainable Artificial Intelligence）是一类旨在提升AI系统透明度和决策可理解性的技术框架。其核心目标是解决传统AI（尤其是深度学习）的\"黑箱问题\"，通过揭示模型的内部逻辑，使用户能够理解：\\n- **决策依据**：模型基于哪些输入特征或数据模式做出判断\\n- **推理过程**：从输入到输出的中间推理链条\\n- **置信度评估**：决策的可信度或不确定性量化\\n\\n#### 2. **技术实现维度**\\n根据上下文提到的技术方向，XAI的实现路径包括：\\n- **可视化工具**：如注意力热力图（显示图像分类中关注的像素区域）\\n- **简化模型替代**：用决策树等可解释模型近似复杂模型的局部行为\\n- **特征重要性分析**：通过SHAP值、LIME等方法量化输入特征对结果的影响\\n- **因果推理**：建立变量间的因果关系而非仅相关性（上下文未明确提及但属前沿方向）\\n\\n#### 3. **伦理与社会必要性**\\n上下文强调XAI与以下伦理问题的直接关联：\\n- **偏见缓解**：通过透明化识别数据/算法中的歧视性模式（如信贷审批中的性别偏见）\\n- **问责制**：满足GDPR等法规要求的\"算法解释权\"，明确责任主体\\n- **信任建立**：医疗诊断等高风险场景中，医生需理解AI建议的医学依据\\n\\n#### 4. **应用场景挑战**\\n- **性能-可解释性权衡**：通常模型复杂度与可解释性呈负相关（如深度神经网络vs逻辑回归）\\n- **解释真实性**：某些解释方法可能产生误导性简化（信息缺口：未提及对抗性解释风险）\\n- **用户认知差异**：需针对不同受众（工程师、监管者、普通用户）定制解释层级\\n\\n#### 5. **标准化与治理需求**\\n上下文指出但未深入的方向：\\n- **行业标准缺失**：目前缺乏统一的XAI评估指标（如解释 fidelity 的量化标准）\\n- **跨学科协作**：需要伦理学家、心理学家参与设计\"人类可理解\"的解释形式\\n\\n#### 6. **未来发展方向**\\n结合上下文的\"AI未来趋势\"部分：\\n- **边缘AI集成**：在设备端实现实时解释（如自动驾驶的即时决策说明）\\n- **人机协作增强**：通过XAI建立人类与AI的共识认知框架\\n- **量子计算影响**：可能催生新型可解释量子机器学习模型（信息缺口：当前研究尚未明确）\\n\\n#### 系统建议\\n当前XAI发展需优先解决：\\n1. 建立分场景的可解释性标准（医疗vs金融vs军事）\\n2. 开发兼顾性能和解释深度的新型架构\\n3. 加强用户研究，避免\"解释幻觉\"（形式上可理解但实质无意义）\\n\\n该分析整合了上下文的技术描述、伦理章节及未来趋势，同时标明了需进一步研究的空白领域。'}, 'reference_answer': '可解释的人工智能（XAI）旨在通过提供清晰的决策过程解释，使AI系统变得透明且易于理解。这有助于用户信任并有效管理AI技术。'}], 'comparison': '# 标准检索与自适应检索效果评估\\n\\n## 查询 1: 什么是可解释的人工智能（XAI）？\\n*查询类型: Analytical*\\n\\n**参考答案:**\\n可解释的人工智能（XAI）旨在通过提供清晰的决策过程解释，使AI系统变得透明且易于理解。这有助于用户信任并有效管理AI技术。\\n\\n**标准检索响应:**\\n可解释人工智能（XAI，Explainable AI）是人工智能领域的一个重要分支，旨在通过增强AI系统的透明性和可理解性，使人类能够理解其决策逻辑和内部运作机制。根据上下文，以下是关于XAI的专业解析：\\n\\n### 核心定义与目标\\nXAI通过技术手段揭示传统\"黑箱\"模型（如深度学习）的决策过程，解决因模型复杂性导致的信任和问责问题。其核心目标是：\\n1. **透明度**：展示模型如何从输入数据推导出输出结果。\\n2. **可追溯性**：允许回溯关键决策步骤。\\n3. **人类可理解**：以直观方式（如可视化、自然语言）解释技术细节。\\n\\n### 技术实现方向\\n上下文提到XAI技术正在开发中，主要涉及：\\n- **决策解释**：生成对特定预测的局部解释（如特征重要性分析）。\\n- **模型简化**：使用可解释模型（如决策树）近似复杂模型的行为。\\n- **过程可视化**：通过热力图、注意力机制等展示神经网络的内部关注点。\\n\\n### 应用价值\\n1. **增强信任**：在医疗、金融等高风险领域，解释性可提升用户对AI建议的接受度。\\n2. **伦理合规**：满足GDPR等法规对\"算法解释权\"的要求。\\n3. **偏差检测**：通过解释机制识别训练数据中的潜在偏见（如种族或性别歧视）。\\n\\n### 挑战与发展\\n- **解释精度权衡**：简化解释可能掩盖模型复杂性。\\n- **评估标准缺失**：目前缺乏统一的解释质量衡量指标。\\n- **跨学科需求**：需结合认知科学设计符合人类认知的解释形式。\\n\\nXAI是AI治理框架的关键组成部分（如上下文第五章所述），与边缘AI、量子计算等前沿方向共同构成负责任AI发展的重要支柱。其进步将直接影响AI在社会的可持续部署。\\n\\n**自适应检索响应:**\\n### 可解释人工智能（XAI）的多维度深度解析\\n\\n#### 1. **核心定义与目标**\\n可解释人工智能（XAI, Explainable Artificial Intelligence）是一类旨在提升AI系统透明度和决策可理解性的技术框架。其核心目标是解决传统AI（尤其是深度学习）的\"黑箱问题\"，通过揭示模型的内部逻辑，使用户能够理解：\\n- **决策依据**：模型基于哪些输入特征或数据模式做出判断\\n- **推理过程**：从输入到输出的中间推理链条\\n- **置信度评估**：决策的可信度或不确定性量化\\n\\n#### 2. **技术实现维度**\\n根据上下文提到的技术方向，XAI的实现路径包括：\\n- **可视化工具**：如注意力热力图（显示图像分类中关注的像素区域）\\n- **简化模型替代**：用决策树等可解释模型近似复杂模型的局部行为\\n- **特征重要性分析**：通过SHAP值、LIME等方法量化输入特征对结果的影响\\n- **因果推理**：建立变量间的因果关系而非仅相关性（上下文未明确提及但属前沿方向）\\n\\n#### 3. **伦理与社会必要性**\\n上下文强调XAI与以下伦理问题的直接关联：\\n- **偏见缓解**：通过透明化识别数据/算法中的歧视性模式（如信贷审批中的性别偏见）\\n- **问责制**：满足GDPR等法规要求的\"算法解释权\"，明确责任主体\\n- **信任建立**：医疗诊断等高风险场景中，医生需理解AI建议的医学依据\\n\\n#### 4. **应用场景挑战**\\n- **性能-可解释性权衡**：通常模型复杂度与可解释性呈负相关（如深度神经网络vs逻辑回归）\\n- **解释真实性**：某些解释方法可能产生误导性简化（信息缺口：未提及对抗性解释风险）\\n- **用户认知差异**：需针对不同受众（工程师、监管者、普通用户）定制解释层级\\n\\n#### 5. **标准化与治理需求**\\n上下文指出但未深入的方向：\\n- **行业标准缺失**：目前缺乏统一的XAI评估指标（如解释 fidelity 的量化标准）\\n- **跨学科协作**：需要伦理学家、心理学家参与设计\"人类可理解\"的解释形式\\n\\n#### 6. **未来发展方向**\\n结合上下文的\"AI未来趋势\"部分：\\n- **边缘AI集成**：在设备端实现实时解释（如自动驾驶的即时决策说明）\\n- **人机协作增强**：通过XAI建立人类与AI的共识认知框架\\n- **量子计算影响**：可能催生新型可解释量子机器学习模型（信息缺口：当前研究尚未明确）\\n\\n#### 系统建议\\n当前XAI发展需优先解决：\\n1. 建立分场景的可解释性标准（医疗vs金融vs军事）\\n2. 开发兼顾性能和解释深度的新型架构\\n3. 加强用户研究，避免\"解释幻觉\"（形式上可理解但实质无意义）\\n\\n该分析整合了上下文的技术描述、伦理章节及未来趋势，同时标明了需进一步研究的空白领域。\\n\\n**比较分析:**\\n### 标准检索与自适应检索响应质量对比分析报告\\n\\n#### 1. 核心事实的准确度差异\\n**标准检索**：\\n- 准确复现了XAI的核心定义（透明性、可理解性）和技术目标（决策解释、模型简化等）\\n- 严格遵循上下文的技术描述，未引入外部假设\\n- 对挑战的表述与行业共识一致（如解释精度权衡）\\n\\n**自适应检索**：\\n- 在保持基础事实准确性的同时，扩展了技术实现维度（如新增因果推理）\\n- 主动补充上下文未明确提及但相关的前沿方向（量子计算影响）\\n- 存在轻微风险：关于\"解释幻觉\"的表述缺乏上下文直接支持\\n\\n**对比**：两者均达到专业级准确度，但自适应检索通过合理外延展现了更强的知识整合能力。\\n\\n#### 2. 上下文关联强度对比\\n**标准检索**：\\n- 严格绑定上下文提供的技术方向（可视化、模型简化）\\n- 直接引用上下文结构（如\"第五章所述\"）\\n- 应用场景与上下文提到的医疗/金融领域完全对应\\n\\n**自适应检索**：\\n- 动态建立跨章节关联（如连接伦理章节与未来趋势）\\n- 通过\"信息缺口\"标注主动识别上下文未覆盖领域\\n- 新增的边缘AI案例与上下文\"设备端部署\"理念隐含呼应\\n\\n**对比**：标准检索更忠实于原文结构，自适应检索展现出更强的上下文语义网络构建能力。\\n\\n#### 3. 信息完整度评估\\n**标准检索**：\\n- 覆盖参考答案所有关键要素（定义、技术、价值）\\n- 提供标准的技术分类（局部解释/全局解释）\\n- 缺少对\"不同受众需求\"的差异化分析\\n\\n**自适应检索**：\\n- 系统性补充参考答案未提及的维度（标准化需求、认知差异）\\n- 建立技术-伦理-治理的完整分析框架\\n- 通过\"系统建议\"部分提升可操作性\\n\\n**对比**：自适应检索的信息完整度显著优于标准检索（覆盖度+35%），尤其在跨学科整合方面。\\n\\n#### 4. 与参考答案的语义契合度\\n**标准检索**：\\n- 与参考答案的术语使用高度一致（透明性、可追溯性）\\n- 价值表述几乎逐点对应（信任、合规、偏差检测）\\n- 严格保持学术中立性，与参考答案风格完全匹配\\n\\n**自适应检索**：\\n- 在保持核心语义的基础上进行适度延伸（如增加\"共识认知框架\"）\\n- 通过分级标题提升逻辑显性化程度\\n- 部分新增内容（如量子计算）超出参考答案范围但未冲突\\n\\n**对比**：标准检索在表面一致性上略优（契合度98% vs 92%），但自适应检索实现了更深层的概念发展。\\n\\n---\\n\\n### 综合评估结论\\n\\n**标准检索优势**：\\n1. 事实表述的绝对可靠性\\n2. 与参考答案的逐点对应能力\\n3. 适合需要严格引用的学术场景\\n\\n**标准检索不足**：\\n1. 缺乏对上下文隐含逻辑的挖掘\\n2. 应对开放性问题时扩展性有限\\n3. 信息组织方式较为传统\\n\\n**自适应检索优势**：\\n1. 动态构建知识关联网络\\n2. 显著提升决策支持价值\\n3. 更符合实际应用场景需求\\n\\n**自适应检索风险**：\\n1. 需谨慎控制合理外延边界\\n2. 对上下文理解能力要求更高\\n3. 可能不适合法规合规等严格引用场景\\n\\n**改进建议**：\\n- 标准检索可增加\"关联建议\"模块提升实用性\\n- 自适应检索应添加外延内容的风险等级标注\\n- 两者均可通过可视化技术（如知识图谱）增强解释效果\\n\\n'}\n",
      "======================================评估结果======================================\n",
      "# 标准检索与自适应检索效果评估\n",
      "\n",
      "## 查询 1: 什么是可解释的人工智能（XAI）？\n",
      "*查询类型: Analytical*\n",
      "\n",
      "**参考答案:**\n",
      "可解释的人工智能（XAI）旨在通过提供清晰的决策过程解释，使AI系统变得透明且易于理解。这有助于用户信任并有效管理AI技术。\n",
      "\n",
      "**标准检索响应:**\n",
      "可解释人工智能（XAI，Explainable AI）是人工智能领域的一个重要分支，旨在通过增强AI系统的透明性和可理解性，使人类能够理解其决策逻辑和内部运作机制。根据上下文，以下是关于XAI的专业解析：\n",
      "\n",
      "### 核心定义与目标\n",
      "XAI通过技术手段揭示传统\"黑箱\"模型（如深度学习）的决策过程，解决因模型复杂性导致的信任和问责问题。其核心目标是：\n",
      "1. **透明度**：展示模型如何从输入数据推导出输出结果。\n",
      "2. **可追溯性**：允许回溯关键决策步骤。\n",
      "3. **人类可理解**：以直观方式（如可视化、自然语言）解释技术细节。\n",
      "\n",
      "### 技术实现方向\n",
      "上下文提到XAI技术正在开发中，主要涉及：\n",
      "- **决策解释**：生成对特定预测的局部解释（如特征重要性分析）。\n",
      "- **模型简化**：使用可解释模型（如决策树）近似复杂模型的行为。\n",
      "- **过程可视化**：通过热力图、注意力机制等展示神经网络的内部关注点。\n",
      "\n",
      "### 应用价值\n",
      "1. **增强信任**：在医疗、金融等高风险领域，解释性可提升用户对AI建议的接受度。\n",
      "2. **伦理合规**：满足GDPR等法规对\"算法解释权\"的要求。\n",
      "3. **偏差检测**：通过解释机制识别训练数据中的潜在偏见（如种族或性别歧视）。\n",
      "\n",
      "### 挑战与发展\n",
      "- **解释精度权衡**：简化解释可能掩盖模型复杂性。\n",
      "- **评估标准缺失**：目前缺乏统一的解释质量衡量指标。\n",
      "- **跨学科需求**：需结合认知科学设计符合人类认知的解释形式。\n",
      "\n",
      "XAI是AI治理框架的关键组成部分（如上下文第五章所述），与边缘AI、量子计算等前沿方向共同构成负责任AI发展的重要支柱。其进步将直接影响AI在社会的可持续部署。\n",
      "\n",
      "**自适应检索响应:**\n",
      "### 可解释人工智能（XAI）的多维度深度解析\n",
      "\n",
      "#### 1. **核心定义与目标**\n",
      "可解释人工智能（XAI, Explainable Artificial Intelligence）是一类旨在提升AI系统透明度和决策可理解性的技术框架。其核心目标是解决传统AI（尤其是深度学习）的\"黑箱问题\"，通过揭示模型的内部逻辑，使用户能够理解：\n",
      "- **决策依据**：模型基于哪些输入特征或数据模式做出判断\n",
      "- **推理过程**：从输入到输出的中间推理链条\n",
      "- **置信度评估**：决策的可信度或不确定性量化\n",
      "\n",
      "#### 2. **技术实现维度**\n",
      "根据上下文提到的技术方向，XAI的实现路径包括：\n",
      "- **可视化工具**：如注意力热力图（显示图像分类中关注的像素区域）\n",
      "- **简化模型替代**：用决策树等可解释模型近似复杂模型的局部行为\n",
      "- **特征重要性分析**：通过SHAP值、LIME等方法量化输入特征对结果的影响\n",
      "- **因果推理**：建立变量间的因果关系而非仅相关性（上下文未明确提及但属前沿方向）\n",
      "\n",
      "#### 3. **伦理与社会必要性**\n",
      "上下文强调XAI与以下伦理问题的直接关联：\n",
      "- **偏见缓解**：通过透明化识别数据/算法中的歧视性模式（如信贷审批中的性别偏见）\n",
      "- **问责制**：满足GDPR等法规要求的\"算法解释权\"，明确责任主体\n",
      "- **信任建立**：医疗诊断等高风险场景中，医生需理解AI建议的医学依据\n",
      "\n",
      "#### 4. **应用场景挑战**\n",
      "- **性能-可解释性权衡**：通常模型复杂度与可解释性呈负相关（如深度神经网络vs逻辑回归）\n",
      "- **解释真实性**：某些解释方法可能产生误导性简化（信息缺口：未提及对抗性解释风险）\n",
      "- **用户认知差异**：需针对不同受众（工程师、监管者、普通用户）定制解释层级\n",
      "\n",
      "#### 5. **标准化与治理需求**\n",
      "上下文指出但未深入的方向：\n",
      "- **行业标准缺失**：目前缺乏统一的XAI评估指标（如解释 fidelity 的量化标准）\n",
      "- **跨学科协作**：需要伦理学家、心理学家参与设计\"人类可理解\"的解释形式\n",
      "\n",
      "#### 6. **未来发展方向**\n",
      "结合上下文的\"AI未来趋势\"部分：\n",
      "- **边缘AI集成**：在设备端实现实时解释（如自动驾驶的即时决策说明）\n",
      "- **人机协作增强**：通过XAI建立人类与AI的共识认知框架\n",
      "- **量子计算影响**：可能催生新型可解释量子机器学习模型（信息缺口：当前研究尚未明确）\n",
      "\n",
      "#### 系统建议\n",
      "当前XAI发展需优先解决：\n",
      "1. 建立分场景的可解释性标准（医疗vs金融vs军事）\n",
      "2. 开发兼顾性能和解释深度的新型架构\n",
      "3. 加强用户研究，避免\"解释幻觉\"（形式上可理解但实质无意义）\n",
      "\n",
      "该分析整合了上下文的技术描述、伦理章节及未来趋势，同时标明了需进一步研究的空白领域。\n",
      "\n",
      "**比较分析:**\n",
      "### 标准检索与自适应检索响应质量对比分析报告\n",
      "\n",
      "#### 1. 核心事实的准确度差异\n",
      "**标准检索**：\n",
      "- 准确复现了XAI的核心定义（透明性、可理解性）和技术目标（决策解释、模型简化等）\n",
      "- 严格遵循上下文的技术描述，未引入外部假设\n",
      "- 对挑战的表述与行业共识一致（如解释精度权衡）\n",
      "\n",
      "**自适应检索**：\n",
      "- 在保持基础事实准确性的同时，扩展了技术实现维度（如新增因果推理）\n",
      "- 主动补充上下文未明确提及但相关的前沿方向（量子计算影响）\n",
      "- 存在轻微风险：关于\"解释幻觉\"的表述缺乏上下文直接支持\n",
      "\n",
      "**对比**：两者均达到专业级准确度，但自适应检索通过合理外延展现了更强的知识整合能力。\n",
      "\n",
      "#### 2. 上下文关联强度对比\n",
      "**标准检索**：\n",
      "- 严格绑定上下文提供的技术方向（可视化、模型简化）\n",
      "- 直接引用上下文结构（如\"第五章所述\"）\n",
      "- 应用场景与上下文提到的医疗/金融领域完全对应\n",
      "\n",
      "**自适应检索**：\n",
      "- 动态建立跨章节关联（如连接伦理章节与未来趋势）\n",
      "- 通过\"信息缺口\"标注主动识别上下文未覆盖领域\n",
      "- 新增的边缘AI案例与上下文\"设备端部署\"理念隐含呼应\n",
      "\n",
      "**对比**：标准检索更忠实于原文结构，自适应检索展现出更强的上下文语义网络构建能力。\n",
      "\n",
      "#### 3. 信息完整度评估\n",
      "**标准检索**：\n",
      "- 覆盖参考答案所有关键要素（定义、技术、价值）\n",
      "- 提供标准的技术分类（局部解释/全局解释）\n",
      "- 缺少对\"不同受众需求\"的差异化分析\n",
      "\n",
      "**自适应检索**：\n",
      "- 系统性补充参考答案未提及的维度（标准化需求、认知差异）\n",
      "- 建立技术-伦理-治理的完整分析框架\n",
      "- 通过\"系统建议\"部分提升可操作性\n",
      "\n",
      "**对比**：自适应检索的信息完整度显著优于标准检索（覆盖度+35%），尤其在跨学科整合方面。\n",
      "\n",
      "#### 4. 与参考答案的语义契合度\n",
      "**标准检索**：\n",
      "- 与参考答案的术语使用高度一致（透明性、可追溯性）\n",
      "- 价值表述几乎逐点对应（信任、合规、偏差检测）\n",
      "- 严格保持学术中立性，与参考答案风格完全匹配\n",
      "\n",
      "**自适应检索**：\n",
      "- 在保持核心语义的基础上进行适度延伸（如增加\"共识认知框架\"）\n",
      "- 通过分级标题提升逻辑显性化程度\n",
      "- 部分新增内容（如量子计算）超出参考答案范围但未冲突\n",
      "\n",
      "**对比**：标准检索在表面一致性上略优（契合度98% vs 92%），但自适应检索实现了更深层的概念发展。\n",
      "\n",
      "---\n",
      "\n",
      "### 综合评估结论\n",
      "\n",
      "**标准检索优势**：\n",
      "1. 事实表述的绝对可靠性\n",
      "2. 与参考答案的逐点对应能力\n",
      "3. 适合需要严格引用的学术场景\n",
      "\n",
      "**标准检索不足**：\n",
      "1. 缺乏对上下文隐含逻辑的挖掘\n",
      "2. 应对开放性问题时扩展性有限\n",
      "3. 信息组织方式较为传统\n",
      "\n",
      "**自适应检索优势**：\n",
      "1. 动态构建知识关联网络\n",
      "2. 显著提升决策支持价值\n",
      "3. 更符合实际应用场景需求\n",
      "\n",
      "**自适应检索风险**：\n",
      "1. 需谨慎控制合理外延边界\n",
      "2. 对上下文理解能力要求更高\n",
      "3. 可能不适合法规合规等严格引用场景\n",
      "\n",
      "**改进建议**：\n",
      "- 标准检索可增加\"关联建议\"模块提升实用性\n",
      "- 自适应检索应添加外延内容的风险等级标注\n",
      "- 两者均可通过可视化技术（如知识图谱）增强解释效果\n",
      "\n",
      "\n"
     ]
    }
   ],
   "execution_count": 21
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
